3

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 が発生するため、機能しません。

誰かが私が間違っていたことと、この問題をどのように解決できるか教えてもらえますか?

4

2 に答える 2

3

この問題を回避するEntrez.read()には、次のように呼び出しを変更して、validate パラメータを含めます。

record = Entrez.read(handle,validate=False)

この質問に対するもう一方の答えは正しいです。これは、Biopython パーサーの誤りです。うまくいけば、彼らはすぐに更新されます。

于 2012-11-03T16:48:07.643 に答える
2

これは実際には有効な解決策ではありませんが、問題が何であるかを示しています。おそらく biopython (Entrez.Parse) のバグだと思うので、彼らに連絡してどう思うか見てみます。

そのため、Biopython で少しハッキングすると、問題は「ビルド」タグ名が原因であることがわかります。

これを手動で行うと、XML リクエストの最初の数行は次のpubmedようになります。

<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 $

それ以来ビルドタグが追加されていると思いますが、このファイルはそれを反映するように更新されていません。

于 2012-10-31T05:53:11.960 に答える