Форум сайта python.su
0
Всем привет !
Подскажите, пожалуйста, что целенаправленно почитать по поиску в XML-документе с помощью пайтона. XPath, DOM, SAX….
Непрофессиональный программист, с азами XML вроде разобралась.
Моя задача заключается в том, чтобы сопоставить словарь (список слов в txt) с текстовой базой (которая в XML) и вывести, при наличии слова в базе данных, искомое слово и его ближайший контекст (к примеру, искомое слово “кошка”, в базе оно представлено в контексте “пушистая”. Вот это сочетание и нужно вывести в отдельный файл). Может, кто-нибудь знает уже готовые “рецепты” по этой теме.
Буду очень признательна!
Спасибо!
Офлайн
14
DOM вроде самое простое.
Пример xml файла есть?
Офлайн
0
там 190 MB. речь идет о синтаксически аннотированном текстовом корпусе.
вот фрагмент оттуда:
<s id=“s661”>
<graph root=“s661_532”>
<terminals>
<t id=“s661_1” word=“Die” lemma=“der|die|das” pos=“ART” morph=“np*”>
</t>
<t id=“s661_2” word=“etwa” lemma=“etwa” pos=“ADV” morph=“–”>
</t>
<t id=“s661_3” word=“zehn” lemma=“zehn” pos=“CARD” morph=“–”>
</t>
<t id=“s661_4” word=“Studierenden” lemma=“Studierender|Studierende|Studierendes” pos=“NN” morph=“np*”>
</t>
<t id=“s661_5” word=“und” lemma=“und” pos=“KON” morph=“–”>
</t>
<t id=“s661_6” word=“Lehrenden” lemma=“Lehrender|Lehrende|Lehrendes” pos=“NN” morph=“np*”>
</t>
<t id=“s661_7” word=“fordern” lemma=“fordern” pos=“VVFIN” morph=“3pis”>
</t>
(…)
</t>
</terminals>
как видно, там слова из предложений по-отдельности представлены. еще с этим проблема….
т.е. если в моем txt файле есть слово “fordern”, то из XML хочу получить “Lehrenden fordern”, ну или правый контекст.
Отредактировано leona (Авг. 23, 2012 19:08:42)
Офлайн
253
Мда. Я не спец, но думаю что проблема в том что xml это совсем не база данных.
Дальше зависит от задачи:
1 Однократно надо поработать со списком слов.
Тогда- прочитать весь xml (тут лучше SAX технология) в родные питоновские словари и сделать все что надо уже в памяти, благо ваши данные туда поместятся.
2 Задача будет возникать многократно. Тогда лучше перегнать данные в нормальную базу (однократное чтение xml), любую которая вам приятнее, и работу выполнять с ее использованием. (это позволит избежать полного чтения данных при старте программы).
Офлайн
14
doza_andА у нас как раз предмет был - xml базы данных. И там про xpath было
но думаю что проблема в том что xml это совсем не база данных.

Отредактировано odnochlen (Авг. 24, 2012 00:43:54)
Офлайн
0
оу, спасибо за советы. а где почитать про это можно, чтоб вменяемо написано было?
есть вот такая штука LT XML (изначально под C, но есть и пайтоновская версия теперь). кто-нибудь сталкивался с этим инструментом в русскоязычной части web? он специально для text processing разработан, насколько поняла.
Отредактировано leona (Авг. 24, 2012 12:47:51)
Офлайн
253
odnochlenЯ имел ввиду прежде всего индексируемость содержимого. В рассматриваемой задаче именно она и важна и именно ее и нет у xml.
А у нас как раз предмет был - xml базы данных
from xml.etree.ElementTree import ElementTree nm="a01.xml" tree = ElementTree(file=nm) ind=[i.text for i in tree.findall("Propertys/Property/num")] ....
Офлайн
14
doza_andЕще один минус. И да, 190 Мб файл стоило бы перегнать в базу, если будет поиск тормозить.
индексируемость содержимого
Офлайн
0
odnochlenа как это сделать? IDLE завис намертво, когда я просто через ElementTree попыталась вывести корневой каталог.
190 Мб файл стоило бы перегнать в базу
Отредактировано leona (Авг. 25, 2012 16:33:06)
Офлайн
253
leonaПочему вы решили что IDLE завис? Приводите код. Иначе неясно что вы делали. Печать больших объемов данных в самом деле может занять много времени.
попыталась вывести корневой каталог
Отредактировано doza_and (Авг. 25, 2012 22:21:33)
Офлайн