0
我试图从Folger Library Shakespeare TEI XML editions中提取对话框。对话框的一个典型的块看起来是这样的:如何使用python BeautifulSoup提取XML文本?
<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>
我基本上要得到的输出将是这样的: [“霍雷肖”,“A片了。”] 但对于一个特定的所有对话字符。换句话说,我希望能够输入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'
为什么不直接使用'lxml'? – 2013-05-02 21:07:03
两点:你如何使用这些数据?你可以发布一个更大的样本,这个样本对于你的用例来说是一个有用的样本大小。是的,我们可以帮助您提取数据,但有大量的解释要做,所以知道如何使用它是很重要的。 – MattH 2013-05-02 21:37:26
@MartijnPieters,我会看看,谢谢。我对解析XML一无所知,所以我只选择了我听到的第一件事。 – Jono 2013-05-03 01:57:33