【问题标题】:Extracting titles of articles deposited in pubmed from Pubmed IDs using bioentrez使用 bioentrez 从 Pubmed ID 中提取存放在 pubmed 中的文章的标题
【发布时间】:2019-12-09 06:38:12
【问题描述】:

我正在尝试使用 Pubmed ID(我在名为“ids”的列表中)提取存放在 Pubmed 中的一些文章的标题。大约有 65 万个 Pubmed ID。该代码似乎工作正常并且不会引发任何错误。但是代码只为一小部分而不是全部提取图块。

以下是代码:

Entrez.email = "xyz@enginebio.com"

for i in range(0,len(ids),10000):

    if i%10000 == 0:   # for me to track the progress of the script
        print (i)

    idlist=ids[i:i+10000]
    handle = Entrez.efetch(db="pubmed", id=idlist, retmode="xml")

    try:
        record = Entrez.read(handle)
    except:
        continue

    title={}

    for j in range(len(record["PubmedArticle"])):

        pmid=record["PubmedArticle"][j]['MedlineCitation']['PMID'][:]
        if "Abstract" in record["PubmedArticle"][j]['MedlineCitation']['Article'].keys():
            title[pmid]=record["PubmedArticle"][j]['MedlineCitation']['Article']['ArticleTitle'].encode('ascii', 'ignore').decode('ascii')

    # save article titles
    subfile='article_titles_'+str(i)+'.txt'
    ar = pd.DataFrame.from_dict(title, orient="index")
    ar.to_csv(subfile,sep="\t",header=None)

任何建议都会很有用。谢谢

【问题讨论】:

  • 如果返回的句柄为空,except: continue 可能会隐藏一些错误。

标签: biopython


【解决方案1】:

我无法复制您的示例,因为我没有您的 Pubmed ID 列表。知道您恢复了大约 650K ID 中的多少也会很有趣,如果您要恢复 639K 标题(可能您的一些 ID 只是丢失了)或 10K,情况就不一样了。我自己尝试了一个迷你示例,它确实检索了标题。我想也许有些身份证是无效的。你可以尝试做小批量,也可以:

  1. except: continue 将隐藏可能由空句柄引起的任何问题(如果查询结果为空)。我会尝试检查异常情况。

  2. 如果 len(record["PubmedArticle"]) 小于您的批处理大小,则引发警告。这样您就可以缩小可能丢失的 ID。

  3. 如果注册表有 Abstract 字段,您只会将标题添加到您的 title 字典中。您确定所有记录都是这种情况吗?我尝试过的案例确实适用,但可能并非所有条目都有这个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    • 1970-01-01
    • 2021-04-26
    • 2018-04-27
    • 1970-01-01
    • 2019-08-18
    相关资源
    最近更新 更多