如何从pubmed

时间:2017-02-26 15:30:58

标签: api bioinformatics biopython 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',我会收到很多论文。因此查询似乎需要术语关键字...但我想要所有论文,而不是某些主题的论文。任何想法如何做到这一点? 谢谢 卡尔

2 个答案:

答案 0 :(得分:3)

这很草率,我希望听到反馈意见,但这里的代码是最新发布的内容与最新论文相同(我不确定是否属实)。基本上是对最新的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

输出:

[28245638, 28245639, 28245640, 28245641, 28245642]

答案 1 :(得分:2)

termrequired parameter,因此您在调用Entrez.egquery时无法忽略它。

如果您需要在指定时间范围内完成所有论文,则可能需要a local copy of MEDLINE and PubMed Central

  

对于MEDLINE,这涉及获得license。对于PubMed Central,您   可以在没有ftp许可的情况下下载Open Access子集。