この質問が以前に尋ねられたかどうかはわかりませんが、見つけられなかったので、私の無知を許してください。約 40 ギグのウィキペディアの xml ダンプを解析 (ストリーム解析) したいと考えています。lxml iterparse aka stream parser を使用してこの仕事をしようとしていますが、書いたコードが何らかの理由で機能しません。やりたいことを説明する前に、この xml 形式について考えてみましょう
<root>
<page>
<title> A </title>
<text> ..........blah blah...... </text>
</page>
<page>
<title> B </title>
<text> This is a line of sample text in title B </text>
</page>
<page>
<title> C </title>
<text> ............blah blah........ </text>
</page>
</root>
上記の xml 構造は、wiki ダンプに非常によく似ていますが、lxml ( xml ツリー全体をメモリにロードせずに (これは不可能です)、正規表現を実行します。まさに私がやりたいことは、現在の「ページ」要素でテキストタグ「Category:Living People」内を探し、そのような一致する正規表現が見つかった場合、「テキスト」タグ内のコンテンツ全体をテキストファイル。しかし、正規表現の前に、lxml パーサー自体に問題があります。以下に試したサンプルコード。前もって感謝します :)
#LXML parser
from lxml import etree
def fast_iter(context, func):
for event, elem in context:
func(elem)
elem.clear()
while elem.getprevious() is not None:
del elem.getparent()[0]
del context
def process_element(elem):
print elem.xpath( 'description/text( )' )
context = etree.iterparse( MYFILE, tag='item' )
fast_iter(context,process_element)
コードを完全に変更して、独自のバージョンを提供してください。問題が解決される限り、私は本当に気にしません!
誰か助けてください!