0

次の構造の多くのインスタンスのように見えるHTMLテキストがあります。

<DOC>
<DOCNO> XXX-2222 </DOCNO>
<FILEID>AP-NR-02-12-88 2344EST</FILEID>
<HEAD>Reports Former Saigon Officials Released from Re-education Camp</HEAD>
<TEXT>
Lots of text here
</TEXT>
</DOC>

私がする必要があるのは、後で分析するために(トークン化など)、DocNo、Headline、およびTextを使用して各構造にインデックスを付けることです。

私はBeautifulSoupを使用することを考えていました、そしてこれは私がこれまでに持っているコードです:

soup = BeautifulSoup (file("AP880212.html").read()) 
num = soup.findAll('docno')

しかし、これは私に次の形式の結果を与えるだけです:

<docno> AP880212-0166 </docno>, <docno> AP880212-0167 </docno>, <docno> AP880212-0168 </docno>, <docno> AP880212-0169 </docno>, <docno> AP880212-0170 </docno>

<>内の数字を抽出するにはどうすればよいですか?そして、それらを見出しやテキストにリンクしますか?

どうもありがとうございます、

サーシャ

4

3 に答える 3

2

タグの内容を取得するには:

docnos = soup.findAll('docno')
for docno in docnos:
    print docno.contents[0]
于 2013-02-13T23:00:51.593 に答える
1

このようなもの:

html = """<DOC>
<DOCNO> XXX-2222 </DOCNO>
<FILEID>AP-NR-02-12-88 2344EST</FILEID>
<HEAD>Reports Former Saigon Officials Released from Re-education Camp</HEAD>
<TEXT>
Lots of text here
</TEXT>
</DOC>
"""

import bs4

d = {}

soup = bs4.BeautifulSoup(html, features="xml")
docs = soup.findAll("DOC")
for doc in docs:
    d[doc.DOCNO.getText()] = (doc.HEAD.getText(), doc.TEXT.getText())

print d
#{u' XXX-2222 ': 
#   (u'Reports Former Saigon Officials Released from Re-education Camp', 
#    u'\nLots of text here\n')}

features="xml"コンストラクターに渡すことに注意してください。これは、入力に非標準の html タグが多数含まれているためです。おそらく.strip()、辞書に保存する前にテキストを入力して、空白の影響を受けないようにすることもできます (もちろん、それが意図されている場合を除きます)。

アップデート:

同じファイルに複数の DOC があり、features="xml"1 つに制限されている場合は、XML パーサーがルート要素を 1 つしか持たないと想定している可能性があります。

たとえば、入力 XML 全体を単一のルート要素でラップすると、次のように動作するはずです。

<XMLROOT>
    <!-- Existing XML (e.g. list of DOC elements) -->
</XMLROOT>

したがって、ファイルでこれを行うことができます。または、入力テキストをbeautifulsoupに渡す前に、プログラムでこれを行うことをお勧めします。

root_element_name = "XMLROOT"  # this can be anything
rooted_html = "<{0}>\n{1}\n</{0}>".format(root_element_name, html)
soup = bs4.BeautifulSoup(rooted_html, features="xml")
于 2013-02-13T23:00:24.843 に答える
0
docnos = soup.findAll('docno')
for docno in docnos:
       print docno.renderContents()

renderContents() タグから情報を抽出するために使用することもできます。

于 2013-02-14T08:34:15.353 に答える