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"
>
我正在使用 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"
>