Lesson 15 of 20 · 8 min
Literature: PubMed and Europe PMC
By the end of this lesson you will be able to trace any fact in a database record back to the paper that established it, and search that paper by the two literature engines that index it — PubMed and Europe PMC.
PubMed: an index, not a library
PubMed is the U.S. National Library of Medicine's index of biomedical literature — tens of millions of citations, each with a title, author list, journal, abstract, and a set of standardized subject terms called MeSH (Medical Subject Headings). Every citation gets a PMID, a stable integer that identifies that one citation forever. The paper that first cloned BRCA1 — Miki et al., "A strong candidate for the breast and ovarian cancer susceptibility gene BRCA1," Science, 1994 — carries PMID 7545954. Quote that number anywhere and every downstream database resolves it to the same citation.
The detail that trips people up: PubMed indexes citations, it does not host full text. A PMID gets you the abstract and metadata, never the PDF. Full text, when it exists, lives in a separate NCBI archive called PubMed Central, with its own ID format, PMCID, like PMC1234567. A PMID and a PMCID are not interchangeable — many older or paywalled papers have a PMID and no PMCID at all.
Gotcha: PMID and PMCID look similar and are not the same thing. 7545954 is a PubMed citation ID; PMC1234567 is a PubMed Central full-text ID. A record can have the first without the second. If your script needs the actual article text, check for a PMCID before assuming one exists.
Europe PMC: the EBI counterpart, with full text and annotations
Europe PMC is EMBL-EBI's parallel literature service, the one already named in the hub table back in The Two Hubs: NCBI Entrez and EMBL-EBI. It mirrors every PubMed/MEDLINE citation, then adds three things PubMed alone does not give you: open-access full text for a large share of PMC and non-PMC journals, preprints from servers like bioRxiv, and text-mined annotations — genes, diseases, and chemicals that Europe PMC's pipelines have already tagged inside the article text. Search Europe PMC for BRCA1 and its annotation layer can hand you every full-text paragraph where BRCA1 was mentioned as a gene, not just the ones where it happened to be a search term in the abstract.
| PubMed | Europe PMC | |
|---|---|---|
| Runs at | NLM (NCBI) | EMBL-EBI |
| Core content | Citations + abstracts, MeSH-indexed | Same citations, mirrored, plus preprints |
| Full text | No (redirects to PMC) | Yes, for the open-access subset |
| Text-mined tags | No | Yes — gene/disease/chemical annotations |
| Primary ID | PMID | PMID, PMCID, or its own PPR for preprints |
Because Europe PMC mirrors MEDLINE, a search restricted to SRC:MED behaves like plain PubMed; drop that filter and preprints and EBI-only content join the results too.
# Europe PMC REST search, JSON output, MEDLINE-only
curl "https://www.ebi.ac.uk/europepmc/webservices/rest/search?query=BRCA1%20AND%20SRC:MED&format=json&pageSize=5"Literature is the evidence layer under curation
Every curated fact you have met this course rests on a paper. A Swiss-Prot record — the reviewed half of UniProt — is not an opinion; every functional annotation in BRCA1's entry, P38398, carries a reference list of the PubMed citations that support it. OMIM's entry for BRCA1, 113705, works the same way: its clinical synopsis is a running bibliography. This is why literature belongs in the same course as accessions and cross-references — it is the layer of evidence underneath the layer of structured data. A curator reads Miki et al. 1994, decides "this establishes BRCA1 as the 17q-linked susceptibility gene," and writes that decision into a database field with PMID 7545954 attached as proof.
That is also why searching literature by gene name is a routine task, not a side quest. The same ESearch you have used against db="gene" and db="gds" works against db="pubmed":
from Bio import Entrez
Entrez.email = "[email protected]"
handle = Entrez.esearch(
db="pubmed",
term="BRCA1[Title/Abstract] AND Homo sapiens[MeSH Terms]",
retmax=5,
)
record = Entrez.read(handle)
print(record["Count"], "citations mention BRCA1")
print(record["IdList"]) # a list of PMIDs, e.g. ['7545954', ...]Preview: going the other way with ECitMatch
Everything above starts from a gene and ends at a PMID. Sometimes you have the opposite problem: a reference list with journal, year, volume, and page, and no PMID attached. NCBI's ECitMatch utility solves exactly that — it takes a citation string in a fixed pipe-delimited format and returns the matching PMID:
science|1994|266|66|miki|BRCA1_1994|Feed that line to ECitMatch and it comes back with 7545954 appended — the same PMID, found from the citation instead of the gene. This is a batch-matching tool, and it belongs to the same E-utilities family as ESearch and EFetch you already used above. For now, just recognize the shape of the problem it solves: citation text in, PMID out.
What you can now do
You can tell a citation index from a full-text archive, read a PMID and a PMCID without confusing them, and see why a Swiss-Prot or OMIM record is really a set of claims backed by papers you can go read yourself. That evidence layer is what every accession-driven fact in this course ultimately rests on — a database record is only as trustworthy as the literature standing behind it.