如何从pubmed获取最新论文
How to get the latest papers from pubmed
这是一个有点具体的问题,但以前肯定有人这样做过。我想从 pubmed 获取最新的论文。不是关于某个主题的论文,而是所有主题的论文。我想根据修改日期 (mdat) 进行查询。我使用 biopython.py,我的代码如下所示
handle = Entrez.egquery(mindate='2015/01/10',maxdate='2017/02/19',datetype='mdat')
results = Entrez.read(handle)
for row in results["eGQueryResult"]:
if row["DbName"]=="nuccore":
print(row["Count"])
然而,这导致论文为零。如果我添加 term='cancer' 我会得到一堆论文。所以查询似乎需要术语关键字......但我想要所有论文,而不是关于某个主题的论文。任何想法如何做到这一点?
谢谢
卡尔
term
是 required parameter,因此您不能在调用 Entrez.egquery
.
时省略它
如果您需要指定时间范围内的所有论文,您可能需要 a local copy of MEDLINE and PubMed Central:
For MEDLINE, this involves getting a license. For PubMed Central, you
can download the Open Access subset without a license by ftp.
这很草率,我想听听反馈,但这里的代码认为最新的 pubmed id 与最新的论文相同(我不确定这是真的)。基本上对最新的 PMID 进行二进制搜索,然后给出 n
最新的列表。这不看日期,只看 returns PMID,所以我不确定这是一个合适的答案,但也许这个想法可以调整。
代码:
import urllib2
def pmid_exists(pmid):
url_stem = 'https://www.ncbi.nlm.nih.gov/pubmed/'
query = url_stem+str(pmid)
try:
request = urllib2.urlopen(query)
return True
except urllib2.HTTPError:
return False
def get_latest_pmid(max_exists = 27239557, min_missing = -1):
#print max_exists,'-->',min_missing
if abs(min_missing-max_exists) <= 1:
return max_exists
guess = (max_exists+min_missing)/2
if min_missing == -1:
guess = 2*max_exists
if pmid_exists(guess):
return get_latest_pmid(guess, min_missing)
else:
return get_latest_pmid(max_exists, guess)
#Start of program
if __name__ == '__main__':
n = 5
latest_pmid = get_latest_pmid()
most_recent_n_pmids = range(latest_pmid-n, latest_pmid)
print most_recent_n_pmids
输出:
[28245638, 28245639, 28245640, 28245641, 28245642]
这是一个有点具体的问题,但以前肯定有人这样做过。我想从 pubmed 获取最新的论文。不是关于某个主题的论文,而是所有主题的论文。我想根据修改日期 (mdat) 进行查询。我使用 biopython.py,我的代码如下所示
handle = Entrez.egquery(mindate='2015/01/10',maxdate='2017/02/19',datetype='mdat')
results = Entrez.read(handle)
for row in results["eGQueryResult"]:
if row["DbName"]=="nuccore":
print(row["Count"])
然而,这导致论文为零。如果我添加 term='cancer' 我会得到一堆论文。所以查询似乎需要术语关键字......但我想要所有论文,而不是关于某个主题的论文。任何想法如何做到这一点? 谢谢 卡尔
term
是 required parameter,因此您不能在调用 Entrez.egquery
.
如果您需要指定时间范围内的所有论文,您可能需要 a local copy of MEDLINE and PubMed Central:
For MEDLINE, this involves getting a license. For PubMed Central, you can download the Open Access subset without a license by ftp.
这很草率,我想听听反馈,但这里的代码认为最新的 pubmed id 与最新的论文相同(我不确定这是真的)。基本上对最新的 PMID 进行二进制搜索,然后给出 n
最新的列表。这不看日期,只看 returns PMID,所以我不确定这是一个合适的答案,但也许这个想法可以调整。
代码:
import urllib2
def pmid_exists(pmid):
url_stem = 'https://www.ncbi.nlm.nih.gov/pubmed/'
query = url_stem+str(pmid)
try:
request = urllib2.urlopen(query)
return True
except urllib2.HTTPError:
return False
def get_latest_pmid(max_exists = 27239557, min_missing = -1):
#print max_exists,'-->',min_missing
if abs(min_missing-max_exists) <= 1:
return max_exists
guess = (max_exists+min_missing)/2
if min_missing == -1:
guess = 2*max_exists
if pmid_exists(guess):
return get_latest_pmid(guess, min_missing)
else:
return get_latest_pmid(max_exists, guess)
#Start of program
if __name__ == '__main__':
n = 5
latest_pmid = get_latest_pmid()
most_recent_n_pmids = range(latest_pmid-n, latest_pmid)
print most_recent_n_pmids
输出:
[28245638, 28245639, 28245640, 28245641, 28245642]