For many people, simple PubMed author searches suffice, e.g. "Pearson WR[Author]". For some, such name-based searches get it mostly right, but may include a few spurious false hits. For these cases, it's easy enough to exclude those false hits explicitly (e.g. "Mackey AJ"[Author] NOT 9850730[PMID] NOT 10730495[PMID] gets rid of the two AJ Mackey publications that are not, in fact, mine). For others, simple author searches do not suffice at all, but usually adding an institution and/or departmental affiliation does narrow the results sufficiently (e.g. for Jeff Smith, Biochemistry: "Smith JS"[au] AND "University of Virginia"[Affiliation] AND "Biochemistry"[Affiliation] identifies the 16 articles for which Jeff Smith is the senior author; Jeff could also add a few collaborative publications by adding those pubmed IDs to the search, i.e. adding "OR 17482543[PMID]" to the end of his query.
Your Publications (with PMCID) as a PubMed Query
Using NCBI E-Utilities
What most people don't realize is that this Entrez system is easily adapted for programmatic access (there are lots of details here). For example, recently I was interested in building a co-authorship network for a few investigators in our center, and rather than searching for and exporting this information using the pubmed website, I used the Entrez E-utilities inside a perl script. Python, Ruby and other scripting languages work great too, but I have gotten used to perl for tasks like this. If you don't have access to a linux distribution with perl installed, you can use strawberry perl in Windows.
To start, we need a web retrieval library called LWP::Simple. If for some reason you don't have this installed by default, you should be able to find it in a CPAN search.
use LWP::Simple;
Then, I set up the base url for the entrez utilities.
my $esearch = "http://www.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?" . "db=pubmed&retmax=10000&usehistory=y&term=";
In the above line, you can change the db= to any of the databases listed here. The retmax= value is the maximum number of results to return. The term= value is the collection of search terms you wish to use. In my case, I used an authors last name, initials, and our home institution, Vanderbilt. We then execute the query.
my $q = "Bush WS Vanderbilt";
my $esearch_result = get($esearch . $q);
So here, we use a two-step process --
1. First, the program submits a search to the system. When this happens, their web-servers accept the search request and tag it with WebEnv ID (which the web-dev geeks would call a session variable) and a query key, then conducts the search to find identifiers that match the search request. Since we searched the pubmed database, the identifiers are all pubmed ids. This list of ids is stored on the NCBI servers for a brief time until it expires.
To do anything useful with our list of identifiers sitting on the NCBI servers out there, we need to pull the WebEnv ID and the QueryKey from the esearch result. The following code will yank these out of the XML stuff the web server sends back, and it also gives us a count of the records our query found.
$esearch_result =~
m|
my $Count = $1;
my $QueryKey = $2;
my $WebEnv = $3;
To see these, you can print them if you like:
print "Count = $Count; QueryKey = $QueryKey; WebEnv $WebEnv\n";
2. Next, our program must submit a fetch request to fish out the details for each of these identifiers. We do this using their eSummary engine, which works like so:
my $efetch = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgidb=gds&query_key=$QueryKey&WebEnv=$WebEnv";
my $efetch_result = get($efetch);
Now within perl, you can parse through this result to pull out any relevant information you might want. In case you don't know, perl is great for parsing text -- all the slashes and squigglies are for doing regular expression pattern matching. For my example, I was curious to see how many people I've been co-author with and on how many publications. I used the following to pull each author/pubmed id combination for a given search term.
@lines = split(/\n/,$efetch_result);
%citarray = ();
$opendoc = 0;
$id = 0;
foreach $line (@lines)
{
if($line =~ /
{
$opendoc = 1;
}
if($line =~ /<\/DocSum>/)
{
$opendoc = 0;
}
if($opendoc == 1 && $line =~ /
{
$id = $1;
}
if($opendoc == 1 && $line =~ /
{
print "$id\t$1\n";
}
}
For the sake of brevity, I'll skip a protracted discussion of the parsing logic I used, but if there is interest, I can elaborate.
In case you are wondering, I loaded this into a database table, joined that table to itself matching on pubmed id, and imported this into Gephi to build our co-authorship network. This was a big hit at the faculty meeting!

Abstract Art with PubMed2Wordle
And quite different results for where I'm planning to do my postdoc:
Looks useful to quickly get a sense of what other people work on.
http://www.pubmed2wordle.appspot.com/
FreeMyPDF.com unlocks PDFs for submitting to PubMed Central
I've uploaded a few of my own papers, and a snag I often run into is that the publisher will often "lock" the PDF by enabling security which prevents software from extracting data from the PDF file. FreeMyPDF.com will liberate your PDF from data extraction, printing, and other security restrictions, making it compatible with the NIH manuscript submission system.
NIH Manuscript Submission System
NIH Open Access Policy
FreeMyPDF.com - Removes security from viewable PDFs
Recent improvements to Pubget
1. Citation matching. Pubget's citation matcher seems to work better than Pubmed most of the time. Try going to Pubget and pasting any of these random citations into the search bar:
J Biol Chem 277: 30738-30745
Nucleic Acids Res 2004;32:4812-20.
Evol. Biol. 7, 214 (2007).
2. The PaperPlane bookmarklet. Go here and drag the link to your bookmark toolbar. Now, if you're searching from pubmed, click the bookmarklet for one-click access to the PDF.
3. If you have a long list of PMIDs, separate them with commas and you can paste them directly into the search bar.
Pubget (Vanderbilt institutional link)
Pubget (If you're anywhere else)
Pubget = Pubmed on Steroids
The one thing I've found is that they don't index things as quickly as PubMed, so you might have a hard time finding Advance Online Publications using Pubget.
Would a gene by any other name be just as significant?
Beware! Unfortunately, gene names or acronyms are NOT a standardized way of identifying coding regions. According to Gene Cards, the coding region with the symbol "MYLK" has 14 different symbol aliases, and four unique descriptions! To be complete, conduct a PubMed search using all of these terms. For example, searching PubMed for MYLK retrieves only 30 articles, mostly involving muscle contraction. Searching for MLCK on the other hand retrieves 847 articles! These references have much more emphasis on the neural activities of the gene, so perhaps a difference groups of investigators use different symbols.
To make matters worse, according to Entrez-Gene, MYLK is the "official" gene symbol. yet less than 5% of the PubMed articles use that designation! If possible, use the Entrez-gene or Ensembl gene ID when referencing a gene in the literature to help avoid this confusion.
Pubmed Searches as an RSS feed
To subscribe to a PubMed search, first go to www.pubmed.org and enter your search terms. Once you retrieve a search listing, you'll see a bar that says
Display Summary Show 20 Sort By Send to
The SEND TO drop down box will allow you to select an RSS Feed. Once you select this, you'll be taken to a page with a button that says "Create Feed". When you click this, you'll get a new page with a little orange XML button. Click it and your browser will give you the option to subscribe to the feed. Once you subscribe, there are lots of ways to read RSS Feeds, which we'll probably get to in another post.
Enjoy!




