У меня есть дамп википедии, который я хочу проанализировать, и у меня возникают некоторые трудности/загадочные проблемы при использовании синтаксического анализатора Python xml, ElementTree.
Моя недавняя проблема заключается в том, что ElementTree, похоже, не находит тексты, которые на самом деле есть. Это пример данных:
<page>
<title>Cengiz Han</title>
<ns>0</ns>
<id>10</id>
<revision>
<id>20337884</id>
<parentid>20218916</parentid>
<timestamp>2019-01-29T14:02:43Z</timestamp>
<contributor>
<username>CommonsDelinker</username>
<id>31545</id>
</contributor>
<comment>China_11b.jpg dosyası Map_of_China_1142.jpg ile değiştirildi</comment>
<model>wikitext</model>
<format>text/x-wiki</format>
<text xml:space = "preserve">
...some long Genghis Khan stuff...
</text>
</page>
Теперь, когда я разбираю это с этим:
for event, elem in et.iterparse('dataset/wiki_test', events=('start', 'end', 'start-ns', 'end-ns')):
if event == 'start':
if elem.tag == 'page':
if len(list(elem)) == 0:
continue
title = elem.find('title').text
if title == None or 'MediaWiki' in title:
elem.clear()
continue
wiki_id = elem.find('id')
if wiki_id == None:
elem.clear()
continue
wiki_id = wiki_id.text
revision = elem.find('revision')
if revision != None:
print(list(revision))
text = revision.find('text').text
print(text)
if text != None:
count += 1
titles += title + '\n'
page = {'wiki_id': wiki_id, 'title': title, 'text': text.text}
pages += json.dumps(page, ensure_ascii=False) + '\n'
elem.clear()
revision.find('text').text строка, кажется, не находит текста для элементов немного, включая приведенный выше, и некоторые из них составляют примерно одну седьмую часть моих данных, что раздражает. Это также имело место для page->id для некоторых других записей, в которых утверждалось, что этот элемент вообще не существует. Я решил эту проблему, проигнорировав эти, но я действительно не хочу этого делать, и эта ошибка вообще не имеет для меня смысла.
Вот еще одна страница, которая отлично работает.
<page>
<title>Mustafa Suphi</title>
<ns>0</ns>
<id>22</id>
<revision>
<id>20077185</id>
<parentid>20017115</parentid>
<timestamp>2018-10-14T08:31:32Z</timestamp>
<contributor>
<username>Vikiçizer</username>
<id>90501</id>
</contributor>
<comment>/* top */düzeltme [[Vikipedi:AWB|AWB]] ile</comment>
<model>wikitext</model>
<format>text/x-wiki</format>
<text xml:space = "preserve">
...some Mustafa Suphi stuff...
</text>
<sha1>m5finh6h2kr8h2fbtmsatp5fhz1siwq</sha1>
</revision>
</page>
Что я делаю неправильно?
Не могли бы вы загрузить полный XML и объяснить, какую структуру данных вы хотите извлечь из этого XML?






Вы разместили два примера: "работает" и "не работает".
В "нерабочей" нет
</revision>
Вы уверены, что это XML, который у вас есть, или это просто ошибка копирования и вставки.
Ошибка копирования-вставки.
event == 'start'не гарантирует, что присутствует весь Элемент. Изменить наevent == 'stop'