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'