Biopython 和检索期刊的全名

Biopython and retrieving journal's full name

我正在使用 Biopython 和 Python 3.x 从 PubMed 数据库进行搜索。我正确地得到了搜索结果,但接下来我需要提取搜索结果的所有期刊名称(全名,而不仅仅是缩写)。目前我正在使用以下代码:

from Bio import Entrez
from Bio import Medline

Entrez.email = "my_email@gmail.com"
handle = Entrez.esearch(db="pubmed", term="search_term", retmax=20)
record = Entrez.read(handle)
handle.close()

idlist = record["IdList"]

records = list(records)

for record in records:
    print("source:", record.get("SO", "?"))

所以这很好用,但是 record.get("SO"), "?") returns 只有期刊的缩写(例如,N Engl J Med,而不是 新英格兰医学杂志)。根据我手动PubMed搜索的经验,您可以使用缩写或全名进行搜索,PubMed将以相同的方式处理这些,所以我想是否也有一些参数可以获取全名?

So this works fine, but record.get("SO"), "?") returns only the abbreviation of the journal

不,不是。由于这一行,它甚至不会 运行:

records = list(records)

因为 records 未定义。即使你解决了这个问题,你也会从:

idlist = record["IdList"]

是一个数字列表,例如:['17510654', '2246389'] 旨在通过 Entrez.efetch() 调用传回以获取实际数据。因此,当您对其中一个数字字符串执行 record.get("SO", "?") 时,您的代码会(再次)崩溃。

首先,"SO" 字段缩写定义为 return 期刊名称缩写 (TA) 作为其 return 的一部分。您可能需要 "JT" 期刊名称,而不是 MEDLINE/PubMed Data Element (Field) Descriptions 中定义的期刊名称。但是这些都与这次查找没有任何关系。

这里对您的代码进行了修改,以获取文章标题及其所在期刊的标题:

from Bio import Entrez

Entrez.email = "my_email@gmail.com"  # change this to be your email address
handle = Entrez.esearch(db="pubmed", term="cancer AND wombats", retmax=20)
record = Entrez.read(handle)
handle.close()

for identifier in record['IdList']:
    pubmed_entry = Entrez.efetch(db="pubmed", id=identifier, retmode="xml")
    result = Entrez.read(pubmed_entry)
    article = result['PubmedArticle'][0]['MedlineCitation']['Article']

    print('"{}" in "{}"'.format(article['ArticleTitle'], article['Journal']['Title']))

输出

> python3 test.py
"Of wombats and whales: telomere tales in Madrid. Conference on telomeres and telomerase." in "EMBO reports"
"Spontaneous proliferations in Australian marsupials--a survey and review. 1. Macropods, koalas, wombats, possums and gliders." in "Journal of comparative pathology"
>

详情可参考文档:MEDLINE PubMed XML Element Descriptions