我刚刚安装了Biopython并希望尝试其功能,所以我开始学习本教程。
然而,当我到达关于从Entrez获取信息的章节时,我遇到了一个问题。
本教程中的示例很简单:
from Bio import Entrez
Entrez.email = "A.N.Other@example.com"
handle = Entrez.einfo(db="pubmed")
record = Entrez.read(handle)
这很好用。但是,只要我想解析一个不同于pubmed的数据库,我就会得到以下错误:
Bio.Entrez.Parser.ValidationError: Failed to find tag 'Build' in the DTD. To skip all tags that are not represented in the DTD, please call Bio.Entrez.read or Bio.Entrez.parse with validate=False.
尝试使用validate = False选项也不起作用,因为这会引发Bio.Entrez.Parser.NotXMLError。
有人可以告诉我我做错了什么以及如何解决这个问题?
答案 0 :(得分:3)
为了解决此问题,只需更改您对Entrez.read()
的调用以包含验证参数,如下所示:
record = Entrez.read(handle,validate=False)
这个问题的另一个答案是正确的。这是Biopython解析器中的一个缺陷。希望他们能尽快更新。
答案 1 :(得分:2)
这不是一个有效的解决方案,但是显示出问题所在。我认为这可能是一个biopython(Entrez.Parse)错误,所以我会与他们联系,看看他们的想法。
因此,Biopython的一些黑客攻击显示问题是因为'build'标签名称。
如果我们手动执行此操作,pubmed
XML请求的前几行将如下所示
<eInfoResult>
<DbInfo>
<DbName>pubmed</DbName>
<MenuName>PubMed</MenuName>
<Description>PubMed bibliographic record</Description>
<Count>22224084</Count>
<LastUpdate>2012/10/30 03:30</LastUpdate>
....
但蛋白质请求看起来像这样;
<eInfoResult>
<DbInfo>
<DbName>protein</DbName>
<MenuName>Protein</MenuName>
<Description>Protein sequence record</Description>
<Build>Build121030-0741m.1</Build> <-------- THIS IS BAD
<Count>59244879</Count>
<LastUpdate>2012/10/30 18:39</LastUpdate>
我看了一下Entrez.Parser是如何工作的,它基本上无法识别build
标签。进一步生根显示标签是在DTD文件和einfo DTD文件中定义的,我的系统就在这里;
/usr/local/lib/python2.7/dist-packages/Bio/Entrez/DTDs
如果我们检查相关文件eInfo_020511.dtd
并添加一个构建标记行(下面的行与箭头之前不存在);
<!--
This is the Current DTD for Entrez eInfo
$Id: eInfo_020511.dtd,v 1.1 2008-05-13 11:17:44 mdehoon Exp $
-->
<!-- ================================================================= -->
<!ELEMENT DbName (#PCDATA)> <!-- \S+ -->
<!ELEMENT Name (#PCDATA)> <!-- .+ -->
<!ELEMENT FullName (#PCDATA)> <!-- .+ -->
<!ELEMENT Description (#PCDATA)> <!-- .+ -->
<!ELEMENT Build (#PCDATA)> <!-- .+ --> <------- I ADDED THIS LINE
<!ELEMENT TermCount (#PCDATA)> <!-- \d+ -->
<!ELEMENT Menu (#PCDATA)> <!-- .+ -->
它现在有效。对此文件的评论表明它自2008年以来一直没有更新(下面的行来自DTD标题)。
$Id: eInfo_020511.dtd,v 1.1 2008-05-13 11:17:44 mdehoon Exp $
我的猜测是从那时起添加了构建标记,但此文件从未更新以反映出来。