0

特定のファイルを文字列のリストに解析する必要があります。特定のファイル スタイルは次のとおりです。

<DOC>
<DOCNUM> NUMBER </DOCNUM>
<DOCTYPE> TYPE </DOCTYPE>
<HEADER>
&SOMETHING
</HEADER>
<BODY>
<HEADLINE>
SOME TEXT
</HEADLINE>
TEXT
TEXT 
TEXT 
<TEXT>
<P>
INPUT TEXT1
</P>
<P>
INPUT TEXT2
</P>
.
.
.
</TEXT>
</BODY>
</DOC>

P タグの外観内のすべての TEXTi インスタンスのリストを作成する必要があります。lxml xml パーサーでこれを実行しようとしましたが、xml 形式では何かが受け入れられないため、機能しませんでした... html パーサーを使用してみましたが、それを機能させる方法が正確にわかりませんでした。

必要なリストを取得するための良い方法を知っている人はいますか?

4

3 に答える 3

2

beautifulsoupは問題なく解析できるようです。

>>> from bs4 import BeautifulSoup as BS
>>> from itertools import chain

>>> doc = BS('''<DOC>
<DOCNUM> NUMBER </DOCNUM>
<DOCTYPE> TYPE </DOCTYPE>
<HEADER>
&SOMETHING
</HEADER>
<BODY>
<HEADLINE>
SOME TEXT
</HEADLINE>
TEXT
TEXT 
TEXT 
<TEXT>
<P>

INPUT TEXT1
</P>
<P>
INPUT TEXT2
</P>
.
.
.
</TEXT>
</BODY>
</DOC>''')

>>> list(chain(*[list(p.stripped_strings) for p in doc.find_all('p')]))
[u'INPUT TEXT1', u'INPUT TEXT2']
于 2013-03-25T01:10:16.620 に答える
0

re正規表現関数をインポートするモジュールを使用できます:

import re
strr="<DOC> <DOCNUM> NUMBER </DOCNUM> <DOCTYPE> TYPE </DOCTYPE> <HEADER> &SOMETHING </HEADER> <BODY> <HEADLINE> SOME TEXT </HEADLINE> TEXT TEXT  TEXT  <TEXT> <P> INPUT TEXT1 </P> <P> INPUT TEXT2 </P> . . . </TEXT> </BODY> </DOC>"

arr = re.findall(r'<P>.*?</P>', strr)
print arr

これは、ネストされたタグがない場合に機能し<P>ます (ただし、他のタグはタグに含めることができ<P>ます) 。

于 2013-03-25T01:27:40.503 に答える
0

recover=Trueで無視するオプションを&使用できます<HEADER>

from lxml import etree

doc = etree.parse(xmlish_file, parser=etree.XMLParser(recover=True))
print([p.text for p in doc.iter('P')])
# -> ['\nINPUT TEXT1\n', '\nINPUT TEXT2\n']

または、html として解析することもできます。内のすべてのテキストに興味がある場合<p>; .text_content()代わりに使用できます.text

from lxml import html

doc = html.parse(xmlish_file)
print([p.text_content() for p in doc.iter('p')])
# -> ['\nINPUT TEXT1\n', '\nINPUT TEXT2\n']
于 2013-03-25T01:37:19.040 に答える