2017-02-26 86 views
1

这是一个具体问题,但有人必须这样做。我想从pubmed那里得到最新的论文。不是关于某些主题的文章,而是所有主题。我想根据修改日期(mdat)进行查询。我使用biopython.py和我的代码看起来像这样如何从pubmed获取最新论文

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"]) 

然而,这导致零论文。如果我添加术语='癌症',我收到大量的论文。因此,查询似乎需要术语关键字......但我需要所有论文,而不是某些主题的论文。任何想法如何做到这一点? 感谢 卡尔

回答

3

这是马虎,我想听听反馈意见,但这里的代码是这样的想法,即最新的pubmed id与最新的论文(我不知道是否属实)是一样的。基本上二进制搜索最新的PMID,然后给出最近的n的列表。这不看日期,只返回PMID,所以我不确定这是一个合适的答案,但也许这个想法可以适应。

CODE:

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 

OUTPUT:

[28245638, 28245639, 28245640, 28245641, 28245642] 
+0

太感谢你了...我真的会以为他们有一些大规模的下载在耻辱......一定有人对最新的文章感兴趣?我不相信没有标准的方法来做到这一点? – carl