2016-12-22 12 views
5

Tôi đang cố gắng sử dụng Entrez để nhập dữ liệu xuất bản vào cơ sở dữ liệu. Phần tìm kiếm hoạt động tốt, nhưng khi tôi cố gắng phân tích:Sự cố với phân tích dữ liệu xuất bản từ PubMed với Entrez

from Bio import Entrez 

def create_publication(pmid): 

    handle = Entrez.efetch("pubmed", id=pmid, retmode="xml") 
    records = Entrez.parse(handle) 
    item_data = records.next() 
    handle.close() 

... Tôi nhận được lỗi sau:

File "/venv/lib/python2.7/site-packages/Bio/Entrez/Parser.py", line 296, in parse raise ValueError("The XML file does not represent a list. Please use Entrez.read instead of Entrez.parse") ValueError: The XML file does not represent a list. Please use Entrez.read instead of Entrez.parse

Mã này đã từng làm việc cho đến khi cách đây vài ngày. Bất kỳ ý tưởng gì có thể xảy ra ở đây?

Ngoài ra, nhìn vào mã nguồn (http://biopython.org/DIST/docs/api/Bio.Entrez-pysrc.html) và cố gắng làm theo tấm gương niêm yết, cung cấp cho các lỗi tương tự:

from Bio import Entrez 
Entrez.email = "[email protected]" 
handle = Entrez.efetch("pubmed", id="19304878,14630660", retmode="xml")  
records = Entrez.parse(handle) 
for record in records: 
    print(record['MedlineCitation']['Article']['ArticleTitle']) 
handle.close() 
+1

Silly câu hỏi, nhưng bạn đã thử sử dụng 'Entrez.read()', và sau đó phân tích các kết quả? – MattDMo

+0

read() hoạt động chủ yếu, nhưng có một loạt các mã khác xung quanh điều này. Vì vậy, khi tôi cố gắng, tôi chỉ tiếp tục nhận được các lỗi khác nhau. Vì vậy, hoặc là có một sửa chữa đơn giản cho phân tích cú pháp(), hoặc tôi cần phải viết lại phần còn lại. – apiljic

+0

Điều này được sử dụng để làm việc cho đến ba ngày trước, nhưng có vẻ như một cái gì đó đã thay đổi ở PubMed gần đây, do đó, nó không thành công ngay bây giờ. – apiljic

Trả lời

2

Vấn đề, như tài liệu trong ý kiến ​​khác và GitHub Issue, được gây ra bởi một sự thay đổi có chủ ý của NCBI Entrez Utilities Developers. Như tài liệu trong vấn đề này bằng Jhird, bạn có thể thay đổi mã của bạn như sau:

from Bio import Entrez 
Entrez.email = "[email protected]" 
handle = Entrez.efetch("pubmed", id="19304878,14630660", retmode="xml") 

records = Entrez.read(handle)  # Difference here 
records = records['PubmedArticle'] # New line here 

for record in records: 
    print(record['MedlineCitation']['Article']['ArticleTitle']) 
handle.close() 
Các vấn đề liên quan