2017-02-26 92 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