【发布时间】:2019-03-17 00:16:50
【问题描述】:
早安,
我在学习python的同时也在学习xml:请原谅我的无知。
我有一个带有文本的 xml 文档,我试图将其提取到一行中:最终我想要创建一个 csv 文件,其中包含从属性(作为列)中提取的信息以及文本和每个“块”将在数据框中创建一个新行。
这里是一个xml文件的例子:
<div type="majorSection">
<p>
<tagname ID="xxx.1.1" sID="xxx.1.1.seID.00002" n="1" />
<w lemma="ref:H75">text I want</w>
<w lemma="ref:H40"> more text I want</w>
<w lemma="ref:H83">and</w>
punctuation is on this line without any associated tag.
<tagname eID="xxx.1.1.seID.00002" />
<tagname ID="xxx.1.2" sID="xxx.1.2.seID.00003" n="2" />
<w lemma="ref:H75">second line of text I want</w>
and punctuation is on this line without any associated tag ":"
<w lemma="ref:H8 ref:H14">and again wanted text</w>
with final punctuation line here.
<tagname eID="xxx.1.2.seID.00003" />
如果我对完整标签“p”(段落)感兴趣,我想我知道该怎么做,但我对标签“tagname”之间的文本特别感兴趣,其中 sID 开始块和 eID 结束同一个愿望字符串的块。
所以对于上面的例子,我希望最终结果看起来像
——对于第一行文本——“文本我想要更多我想要的文本,标点符号在这一行,没有任何关联的标签。” (这是来自 sID = xxx.1.1.seID.00002)
——对于第二行文本——“我想要的第二行文本和标点符号在这一行上,没有任何关联的标签:再次想要带有最终标点符号行的文本。” (这是来自 sID = xxx.1.2.seID.00003)
最终我希望在最后的数据框中有一列来标识源,在这种情况下,第一行条目将具有“xxx”、“1”、“1”,而第二行条目将具有“xxx” "、"1"、"2"。
所以最后会有四列:book, chapterNum, textNum, textChar
这是我到目前为止所拥有的,但不确定如何将 textChar 存储到没有换行符的单行中,我也不确定如何从我想要的 sID 属性值中获取其他信息并将其全部放入一个数据框。
for i in soup.find_all('div'):
if i.get('type')=='majorSection':
for j in i.find_all('p'):
for tag in j.find_all('w'):
textChar = tag.text + tag.next_sibling
print(textChar)
我查看了这个解决方案无济于事:How to get all text between just two specified tags using BeautifulSoup?
感谢您对我的耐心等待。我在使用 python 进行文本挖掘方面有很多东西要学,我很高兴能做到,但在这最后两天之后,我陷入了死胡同。
【问题讨论】:
标签: xml python-3.x text beautifulsoup