2012-11-30 39 views
0

快速的問題 - 第一次使用biopython,我只是試圖陪審團 - 基於教程真正快速安裝的東西。無法獲得entrez使用biopython返回網格術語

我似乎無法得到Entrez.efetch()回目而言對於給定的文章,唯一的方法似乎是我在做什麼,即:

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

其中pmids是列表考研標識

這個返回如下:http://pastie.org/5459700

我已經試過,沒有運氣調整每http://www.ncbi.nlm.nih.gov/books/NBK25499/的rettype和retmode參數。我錯過了什麼?

+0

有什麼問題到底是什麼?您的輸出是_python字典_... –

回答

2

最好在Biopython郵件列表或http://www.biostars.org/上詢問這個問題。更有可能找到有Entrez經歷的人。

問題是PMID 23165874的記錄沒有任何MeSH條款。比較​​到one 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> 
    .. 

換句話說,很難得到不存在的東西。

+0

謝謝!如果你能相信,那麼我在閱讀你的回覆之前就自己做了。愚蠢的錯誤;感謝你的幫助! – serilain

+0

Entrez和Pubmed面臨的挑戰之一是在執行MeSH索引之前創建PMID和記錄。所以,雖然這個記錄在發佈時沒有MeSH條款,但它現在確實! –

1

這個工作對我來說:

from Bio import Entrez # install with 'pip install biopython' 
from Bio.Entrez import efetch, read 
Entrez.email = "[email protected]" # 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) 
相關問題