0

Folger Library Shakespeare TEI XML editionsからダイアログを抽出しようとしています。ダイアログの典型的なチャンクは次のようになります。

<sp xml:id="sp-0024" who="#HORATIO">
<speaker xml:id="spk-0024">
<w xml:id="w0003030">HORATIO</w>
</speaker>
<ab xml:id="ab-0024">
<join type="line" xml:id="ftln-0024" n="1.1.24" ana="#short" target="#w0003040 #c0003050 #w0003060 #c0003070 #w0003080 #c0003090 #w0003100 #p0003110"/>
<w xml:id="w0003040" n="1.1.24">A</w>
<c xml:id="c0003050" n="1.1.24"> </c>
<w xml:id="w0003060" n="1.1.24">piece</w>
<c xml:id="c0003070" n="1.1.24"> </c>
<w xml:id="w0003080" n="1.1.24">of</w>
<c xml:id="c0003090" n="1.1.24"> </c>
<w xml:id="w0003100" n="1.1.24">him</w>
<pc xml:id="p0003110" n="1.1.24">.</pc>
</ab>
</sp>

基本的には、['Horatio','A piece of him.'] のような出力を取得したいと考えていますが、特定のキャラクターのすべての会話についてです。つまり、Folger Shakespeare TEI XML ファイルを入力し、gertrude.txt や horatio.txt などのファイルを出力して、それぞれがその特定のキャラクターから収集されたすべてのダイアログを含むようにしたいと考えています。

特定のスピーカーのすべてのダイアログ/ステージ方向/soup.find_all(who=u'#GERTRUDE')その他を取得できますが、さらにドリルダウンしたり、タグ間のテキストを取得したりするなど、結果を再解析せずに他のことを行うことはできないようです。データをもう一度。何が起こるかは次のとおりです。

>>> gertrude=soup.find_all(who=u'#GERTRUDE')
>>> gertrude.w
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'ResultSet' object has no attribute 'w'
>>> gertrude.get_text()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'ResultSet' object has no attribute 'get_text'
4

1 に答える 1

1

BeautifulSoup の.find_all()メソッドResultSetは、特殊な種類のリストであるオブジェクトを返します。0 個以上の一致があり、その結果セットをループするか、インデックスを使用して結果セットに含まれる個々の要素を取得する必要があります。

for speaker in soup.find_all(who=u'#GERTRUDE'):
于 2013-05-03T06:57:06.467 に答える