【问题标题】:can't get entrez to return mesh terms using biopython无法让 entrez 使用 biopython 返回网格项
【发布时间】:2012-11-19 02:06:21
【问题描述】:

快速提问——第一次使用 biopython,我只是想根据教程快速完成一些事情。

我似乎无法让 Entrez.efetch() 返回给定文章的网格术语,唯一的方法似乎是我正在做的事情,即:

handle = Entrez.efetch(db="pubmed", id=pmids, rettype="medline", retmode="xml")
records = Entrez.read(handle)

其中 pmids 是 已发布 ID 的列表

这将返回以下内容:http://pastie.org/5459700

我尝试根据http://www.ncbi.nlm.nih.gov/books/NBK25499/ 调整 rettype 和 retmode 参数,但没有成功。我遗漏了什么明显的东西?

【问题讨论】:

  • 到底是什么问题?你的输出是一个 python dict...

标签: python biopython pubmed


【解决方案1】:

这对我有用:

from Bio import Entrez # install with 'pip install biopython'
from Bio.Entrez import efetch, read
Entrez.email = "your@email.com" # register your email

def get_mesh(pmid):
    # call PubMed API
    handle = efetch(db='pubmed', id=str(pmid), retmode='xml')
    xml_data = read(handle)[0]
    # skip articles without MeSH terms
    if u'MeshHeadingList' in xml_data['MedlineCitation']:
        for mesh in xml_data['MedlineCitation'][u'MeshHeadingList']:
            # grab the qualifier major/minor flag, if any
            major = 'N'
            qualifiers = mesh[u'QualifierName']
            if len(qualifiers) > 0:
                major = str(qualifiers[0].attributes.items()[0][1])
            # grab descriptor name
            descr = mesh[u'DescriptorName']
            name = descr.title()

            yield(name, major)

# example output
for name, major in get_mesh(128):
    print '{}, {}'.format(name, major)

【讨论】:

  • 感谢分享代码。我正在尝试让它运行,尽管它会引发错误:xml_data = read(handle)[0] KeyError: 0 你知道可能是什么原因吗?
  • 对不起,太久了。如果你找到它,请发布修复
【解决方案2】:

这个问题最好在 Biopython 邮件列表或http://www.biostars.org/ 上提出。那里更有可能找到有 Entrez 经验的人。

问题在于 PMID 23165874 的记录没有任何 MeSH 术语。将raw XML of that recordone which has MeSH terms 进行比较。后者有一段开头:

<MeshHeadingList>
  <MeshHeading>
    <DescriptorName MajorTopicYN="N">ADP Ribose Transferases</DescriptorName>
    <QualifierName MajorTopicYN="Y">genetics</QualifierName>
  </MeshHeading>
  <MeshHeading>
    <DescriptorName MajorTopicYN="N">Acinetobacter</DescriptorName>
    <QualifierName MajorTopicYN="Y">drug effects</QualifierName>
    <QualifierName MajorTopicYN="Y">genetics</QualifierName>
  </MeshHeading>
  ..

换句话说,很难得到不存在的东西。

【讨论】:

  • 谢谢!如果您相信的话,我在阅读您的回复之前就自己解决了这个问题。愚蠢的错误;感谢您的帮助!
  • Entrez 和 Pubmed 面临的挑战之一是在执行 MeSH 索引之前创建 PMID 和记录。因此,虽然此记录在发布时没有 MeSH 术语,但现在有!
猜你喜欢
  • 2014-11-04
  • 1970-01-01
  • 2023-02-06
  • 1970-01-01
  • 1970-01-01
  • 2012-11-13
  • 1970-01-01
  • 2013-07-20
  • 1970-01-01
相关资源
最近更新 更多