1

タグ間のドキュメントとプロパティを説明するフォーマットが不十分なXMLを含む大きな(〜50Mb)ファイルがあり、すべての英語のドキュメントからテキストを抽出し<item> </item>たいと思います。

Pythonの標準XML解析ユーティリティ(dom、sax、expat)は不適切なフォーマットを抑制し、より寛容なライブラリ(sgmllib、BeautifulSoup)はファイル全体を解析し、時間がかかりすぎます。

<item>
  <title>some title</title>
  <author>john doe</author>
  <lang>en</lang>
  <document> .... </document>
</item>

ドキュメント全体を解析せずにテキスト<document> </document> 抽出する方法を知っている人はいますか?lang=en

追加情報:「フォーマットが不十分」である理由

一部のドキュメントには<dc:link></dc:link>、パーサーで問題を引き起こす属性があります。Pythonのxml.minidomは次のように文句を言います。

ExpatError: unbound prefix: line 13, column 0
4

4 に答える 4

1

あなたがgawkを持っているなら

gawk 'BEGIN{
 RS="</item>"
 startpat="<document>"
 endpat="</document>"
 lpat=length(startpat)
 epat=length(endpat)
}
/<lang>en<\/lang>/{
    match($0,"<document>")
    start=RSTART
    match($0,"</document>")
    end=RSTART
    print substr($0,start+lpat,end-(start+lpat)) 
}' file

出力

$ more file
Junk
Junk
<item>
  <title>some title</title>
  <author>john doe</author>
  <lang>en</lang>
  <document> text
         i want blah ............  </document>
</item>
junk
junk
<item>
  <title>some title</title>
  <author>jane doe</author>
  <lang>ch</lang>
  <document> junk text
           ..       ............ </document>
</item>
junk
blahblah..
<item>
  <title>some title</title>
  <author>GI joe</author>
  <lang>en</lang>
  <document>  text i want ..... in one line  </document>
</item>
aksfh
aslkfj
dflkas

$ ./shell.sh
 text
         i want blah ............
  text i want ..... in one line
于 2009-11-11T01:24:10.720 に答える
0

SAXや.NETなどのイベント指向のパーサーが必要System.Xml.XmlReaderです。

于 2009-11-10T20:17:31.083 に答える
0

ドキュメントがどのように(そしてどれほどひどく壊れているか)によっては、perl / pythonで単純なフィルターを記述して、XML整形式テストに合格し、DOMまたはXSLTにするのに十分な修正を行うことができる場合があります。

入力の何が問題になっているのか、いくつか例を追加できますか?

于 2009-11-10T20:18:11.060 に答える
0

Javaに問題がなければ、VTD-XMLはこれらの未定義のプレフィックスの問題なしに機能すると思います...

于 2009-11-11T01:00:01.440 に答える