使用 biopython 在 pubmed 上搜索

Searching on pubmed using biopython

我试图在 pubmed 中输入 200 多个条目,以记录作者发表的文章数量,并通过包括 his/her 导师和机构来优化搜索。我曾尝试使用 biopython 和 xlrd(代码如下)来执行此操作,但对于所有三种查询格式(1.按名称,2.按名称和机构名称,以及 3.按名称和导师的名字)。是否有我可以执行的故障排除步骤,或者在使用下面指示的关键字在 pubmed 上搜索时我应该使用不同的格式?

输入查询的示例输出;search_term 是一个包含输入查询列表的链表。

print(*search_term[8:15], sep='\n')


[text:'Andrew Bland', 'Weill Cornell Medical College', text:'David Cutler MD']
[text:'Andy Price', 'University of Alabama at Birmingham School of Medicine', text:'Jason Warem, PhD']
[text:'Bah Chamin', 'University of Texas Southwestern Medical School', text:'Dr. Timothy Hillar']
[text:'Eduo Cera', 'University of Colorado School of Medicine', text:'Dr. Tim']

用于生成上述输入查询和在 Pubmed 上进行搜索的代码:

Entrez.email = "mollyzhaoe@college.harvard.edu"
for search_term in search_terms[8:55]:
    handle = Entrez.egquery(term="{0} AND ((2010[Date - Publication] : 2017[Date - Publication])) ".format(search_term[0]))

    handle_1 = Entrez.egquery(term = "{0} AND ((2010[Date - Publication] : 2017[Date - Publication])) AND {1}".format(search_term[0], search_term[2]))

    handle_2 = Entrez.egquery(term = "{0} AND ((2010[Date - Publication] : 2017[Date - Publication])) AND {1}".format(search_term[0], search_term[1]))

    record = Entrez.read(handle)
    record_1 = Entrez.read(handle_1)
    record_2 = Entrez.read(handle_2)
    pubmed_count = ['','','']
    for row in record["eGQueryResult"]:
        if row["DbName"] == "pubmed":
            pubmed_count[0] = row["Count"]

    for row in record_1["eGQueryResult"]:
        if row["DbName"] == "pubmed":
            pubmed_count[1] = row["Count"]

    for row in record_2["eGQueryResult"]:
        if row["DbName"] == "pubmed":
            pubmed_count[2] = row["Count"]

检查你的缩进,很难知道哪个部分属于哪个循环。

如果您想排除故障,请尝试打印您的 egquery,例如

print("{0} AND ((2010[Date - Publication] : 2017[Date - Publication])) ".format(search_term[0]))

并将输出粘贴到 pubmed,看看你得到了什么。也许稍微修改一下,看看是哪个搜索词导致了问题。

您的输入格式有点难猜。打印查询并确保您获得正确的搜索值。

对于作者姓名,尽量去掉学术头衔,PubMed 可能会将它们与首字母混淆,例如House MD,可能是 Mark David House。