【问题标题】:Searching on pubmed using biopython使用 biopython 在 pubmed 上搜索
【发布时间】:2016-10-20 18:03:03
【问题描述】:

我正在尝试将 200 多个条目输入 pubmed,以记录作者发表的文章数量,并通过包括他/她的导师和机构来优化搜索。我曾尝试使用 biopython 和 xlrd (代码如下)来做到这一点,但我一直得到 0 结果的所有三种查询格式(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"]

【问题讨论】:

    标签: xlrd biopython pubmed


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 有没有办法摆脱'text:'?我不认为它是字符串的一部分,所以我不能使用 str.replace。
    • 您从哪里获得搜索字词?
    • 我事先创建了三个列表,分别是学生姓名、学校名称和导师姓名。然后,我将它们附加到 search_terms。
    • search_terms=[] for row in range(0, book.nrows): search_terms.append([med_name[row], med_school[row], mentor[row]]) print(*search_terms[0:15], sep='\n')
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多