[Bio] / FigKernelScripts / get_pubmed_journals.pl Repository:
ViewVC logotype

Annotation of /FigKernelScripts/get_pubmed_journals.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.5 - (view) (download) (as text)

1 : hwang 1.5 # This script takes in a gi/uni/sp id and output the pubmed articles. Filters include pubmed articles are
2 :     # not more than 10 years old. Each pubmed article has less than 80 links attached to it.
3 :     # Use this script for peg curation.
4 : hwang 1.1 #!/usr/local/bin/perl
5 :     use strict;
6 :     use LWP;
7 :     use XML::LibXML;
8 : hwang 1.3 use FigWebServices::SeedComponents::PubMed;
9 : hwang 1.1
10 :     my $request;
11 :     my $response;
12 :     my $query;
13 :    
14 :     my $debug=1;
15 :     my $link_cutoff=80 ; # if the PUBMED Entry has more than 80 links attached to it, ignore it
16 :     my $pubmed_cutoff=50; # if the PUBMED Entry has more than 40 papers attached to it, ignore it. This is only for gi numbers.
17 :    
18 :     my $numArgs = $#ARGV + 1;
19 :    
20 :     if ($numArgs eq 0) {
21 :     print "Provide a gi or sp id\n";
22 :     print "useage: get_pubmed_journals \"gi|xxxx sp|xxxx\"\n";
23 :     exit;
24 :     }
25 :    
26 :     my @query_array = split(/\s+/, $ARGV[0]);
27 :    
28 :     # The following are urls to search PubMed
29 :     my $accepted_year = 1900;
30 :     my $entrez_base = "http://eutils.ncbi.nlm.nih.gov/entrez/";
31 :     my $ncbi_base = "http://www.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?";
32 :     my $gi_url = $ncbi_base.
33 :     "cmd=llink&db=Pubmed&dbFrom=Protein&retmax=1&usehistory=y&from_uid=";
34 :     my $filter = "&filters=on&pmfilter_PDatRange_MinYear=1995&pmfilter_PDatRange_MinMonth=02".
35 :     "&pmfilter_PDatRange_MinDay=05&pmfilter_PDatRange_MaxYear=2006";
36 :     my $sp_url = "http://us.expasy.org/cgi-bin/get-sprot-entry?";
37 :     my $uni_url = "http://www.ebi.uniprot.org/uniprot-srv/uniProtView.do?proteinAc=";
38 :     my $journal_url = "$entrez_base"."eutils/esummary.fcgi?db=pubmed&id=";
39 :     my $url_format = "&retmode=xml";
40 :     my $gene_id_url = $entrez_base."/eutils/efetch.fcgi?db=gene&dopt=gene_pubmed&id=";
41 :    
42 :     my %uniq_pubmed = ();
43 :    
44 :    
45 :     # Loop through each query to get the PubMed journal
46 :     foreach my $query (@query_array) {
47 :     my $url;
48 :     my $results;
49 :     my $id;
50 :     my $id_num;
51 :     # See if it is gi/uni/sp
52 :     if ($query =~ m/([g|s|u].*)\|(.*)/) {
53 :     $id = $1;
54 :     $id_num = $2;
55 :     }
56 :     if ($query =~ m/(GeneID:)(.*)/){
57 :     $id = $1;
58 :     $id_num = $2;
59 :     }
60 :    
61 :     #print "$query";
62 :    
63 :     if ($id =~ m/gi/) {
64 :     $url = "$gi_url$id_num";
65 :     }
66 :     if ($id =~ m/sp/) {
67 :     $url = "$sp_url$id_num";
68 :     }
69 :     if ($id =~ m/uni/) {
70 :     $url = "$uni_url$id_num";
71 :     }
72 :    
73 :     if ($id =~ m/Gene/) {
74 :     $url = "$gene_id_url$id_num$url_format";
75 :     }
76 :    
77 :     #print $url;
78 :     # Make sure there is a reponse for the url
79 :     $results = &test_url_results($url);
80 :    
81 :    
82 :     if ($id =~ m/gi/) {
83 :     $results = &test_gi_results($results);
84 :     &parse_gi_results($results);
85 :     }
86 :     if ($id =~ m/Gene/) {
87 :     &parse_geneid_results($results);
88 :     }
89 :     if (($id =~ m/sp/) || ($id =~ m/uni/)){
90 :     &parse_results($results);
91 :     }
92 :    
93 :    
94 :    
95 :     }
96 :    
97 :     &print_pubmed;
98 :    
99 :     sub test_gi_results {
100 :    
101 :     my $test_gi_results = $_[0];
102 :     #print $test_gi_results;
103 :     if (! ($test_gi_results =~ m/<Link>/) ) {
104 :     return;
105 :     }
106 :    
107 :     return $test_gi_results;
108 :    
109 :     }
110 :    
111 :     sub test_url_results {
112 :    
113 :     my $url = $_[0];
114 :    
115 :     # Searches Pubmed and Returns the number of results
116 :     $request=LWP::UserAgent->new();
117 :     $response=$request->get($url);
118 :     my $results= $response->content;
119 :     #die unless
120 :    
121 :     if ($results ne "") {
122 :     return $results;
123 :     }
124 :     else {
125 :     print "no url";
126 :     return;
127 :     }
128 :     }
129 :    
130 :    
131 :     sub parse_gi_results {
132 :    
133 :     my $results = $_[0];
134 :     if ($results eq "") {
135 :     return;
136 :     }
137 :    
138 :     my $parser=XML::LibXML->new;
139 :    
140 :     # Uses a DOM based XML parser to process returned results
141 :     my $domtree=$parser->parse_string($results);
142 :    
143 :     my @Records=$domtree->getElementsByTagName("LinkSet");
144 :     my $i=0;
145 :    
146 :     # Extracts element data for regex processing and output formatting
147 :     my $links=$Records[$i]->getElementsByTagName("Link");
148 :    
149 :     chomp($links);
150 :    
151 :     # split the result into the individual PUBMED record identifier
152 :     my @pubmed_numbers=(split " ", $links);
153 :     my $pubmed_count=$#pubmed_numbers+1;
154 :    
155 :     my @current_pubmed;
156 :    
157 :     if ($#pubmed_numbers <= $pubmed_cutoff) {
158 :     &get_pubmed_links(\@pubmed_numbers);
159 :     }
160 :     }
161 :    
162 :     sub check_year {
163 :     my $pubmed_ref = $_[0];
164 :     my @pubmed_year_in = @{$pubmed_ref};
165 :     my @pubmed_year_out;
166 :    
167 :     foreach (@pubmed_year_in) {
168 :    
169 :     #print "\n in loop $_\n";
170 :     my $url = "$journal_url"."$_"."$url_format";
171 :     my $esearch_results = &test_url_results($url);
172 :     $esearch_results =~ m/<*PubDate.*>(\d+)(.*)<\/Item>/;
173 :     my $year = $1;
174 :     #print "$_ $year\n";
175 :     if (($year != "") && ($year >= $accepted_year)) {
176 :    
177 :     push (@pubmed_year_out, $_)
178 :     }
179 :     }
180 :     return @pubmed_year_out;
181 :     }
182 :    
183 :    
184 :     sub parse_results {
185 :    
186 :     my $results = $_[0];
187 :     my $total_sp_links;
188 :     my @sp_array;
189 :     my $pubmed_numbers;
190 :    
191 :    
192 :     while ( $results =~ m/PubMed=\d*/g)
193 :     {
194 :     $pubmed_numbers = $&;
195 :     $pubmed_numbers =~ s/PubMed\=//;
196 :     push(@sp_array, $pubmed_numbers);
197 :     }
198 :    
199 :     &get_pubmed_links(\@sp_array);
200 :    
201 :    
202 :    
203 :     }
204 :    
205 :     sub parse_geneid_results {
206 :    
207 :     my $results = $_[0];
208 :     my @gene_array;
209 :    
210 :    
211 :     while ($results =~ m/<PubMedId>([^<]*)<\/PubMedId>/g)
212 :     {
213 :     my $pubmed_number = $1;
214 :     #print "$pubmed_number\n";
215 :     push(@gene_array, $pubmed_number);
216 :     }
217 :    
218 :     &get_pubmed_links(\@gene_array);
219 :    
220 :     }
221 :    
222 :     sub get_pubmed_links {
223 :    
224 :     my $pubmed_array = $_[0];
225 :     my @pubmed_in = @{$pubmed_array};
226 :     foreach my $pubmed_number (@pubmed_in) {
227 :    
228 :     #print "anything $pubmed_number ";
229 :     # Creates the URL to search Pubmed
230 :     my $baseurl="http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?db=protein&dbfrom=pubmed&id=";
231 :     my $url=$baseurl.$pubmed_number;
232 :    
233 :     # Searches Pubmed and Returns the number of results
234 :     # as well as the session information needed for results retrieval
235 :     $request=LWP::UserAgent->new();
236 :     $response=$request->get($url);
237 :     my $results= $response->content;
238 : hwang 1.3 next unless $response->is_success;
239 : hwang 1.1
240 : hwang 1.3 #Check to see if the word Genome is in the title. If it is, we don't include that paper.
241 :     my $pmid_title = &FigWebServices::SeedComponents::PubMed::pmid_to_title($pubmed_number);
242 :     next if ($pmid_title =~ m/genome/i);
243 : hwang 1.4
244 : hwang 1.1 #Check the total number of links before getting the links
245 :     #If it is less than or equal to the limit of links, we will continue processing.
246 :     my $total_links;
247 :     $total_links++ while ( ($results =~ m/<Link>/g) && ($total_links <= $link_cutoff));
248 : hwang 1.3
249 :     next if ($total_links >= $link_cutoff);
250 :     &add_to_uniq_pubmed($results, $pubmed_number);
251 :     }
252 :    
253 : hwang 1.1 }
254 :    
255 : hwang 1.2
256 : hwang 1.1 sub add_to_uniq_pubmed {
257 :    
258 :     my ($results_in, $pubmed_number) = @_;
259 :     $uniq_pubmed{$pubmed_number} = $pubmed_number;
260 :    
261 :     }
262 :    
263 :     sub print_pubmed {
264 :    
265 :     foreach my $k (keys %uniq_pubmed) {
266 :     print "$k ";
267 :     }
268 :    
269 :     }

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3