leona
Авг. 23, 2012 18:31:46
Всем привет !
Подскажите, пожалуйста, что целенаправленно почитать по поиску в XML-документе с помощью пайтона. XPath, DOM, SAX….
Непрофессиональный программист, с азами XML вроде разобралась.
Моя задача заключается в том, чтобы сопоставить словарь (список слов в txt) с текстовой базой (которая в XML) и вывести, при наличии слова в базе данных, искомое слово и его ближайший контекст (к примеру, искомое слово “кошка”, в базе оно представлено в контексте “пушистая”. Вот это сочетание и нужно вывести в отдельный файл). Может, кто-нибудь знает уже готовые “рецепты” по этой теме.
Буду очень признательна!
Спасибо!
odnochlen
Авг. 23, 2012 18:55:12
DOM вроде самое простое.
Пример xml файла есть?
leona
Авг. 23, 2012 19:04:52
там 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”, ну или правый контекст.
doza_and
Авг. 23, 2012 23:03:14
Мда. Я не спец, но думаю что проблема в том что xml это совсем не база данных.
Дальше зависит от задачи:
1 Однократно надо поработать со списком слов.
Тогда- прочитать весь xml (тут лучше SAX технология) в родные питоновские словари и сделать все что надо уже в памяти, благо ваши данные туда поместятся.
2 Задача будет возникать многократно. Тогда лучше перегнать данные в нормальную базу (однократное чтение xml), любую которая вам приятнее, и работу выполнять с ее использованием. (это позволит избежать полного чтения данных при старте программы).
odnochlen
Авг. 24, 2012 00:40:54
doza_and
но думаю что проблема в том что xml это совсем не база данных.
А у нас как раз предмет был - xml базы данных. И там про xpath было

И гугл про это что-то
слышалПро них я, правда, не очень хорошие вещи слышал. Что и для человека они становятся практически нечитаемы, и при изменении приходится перезаписывать всю базу.
ТС, если тебе надо найти в xml что-то, то тут скорее xpath. Или перегнать в SQL базу данный.
leona
Авг. 24, 2012 12:08:30
оу, спасибо за советы. а где почитать про это можно, чтоб вменяемо написано было?
есть вот такая штука LT XML (изначально под C, но есть и пайтоновская версия теперь). кто-нибудь сталкивался с этим инструментом в русскоязычной части web? он специально для text processing разработан, насколько поняла.
doza_and
Авг. 24, 2012 16:38:34
odnochlen
А у нас как раз предмет был - xml базы данных
Я имел ввиду прежде всего индексируемость содержимого. В рассматриваемой задаче именно она и важна и именно ее и нет у xml.
Цитата из
http://www.xml.nsu.ru/extra/database_2.xml:“Таким образом, хотя и можно использовать 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")]
....
odnochlen
Авг. 24, 2012 16:54:45
doza_and
индексируемость содержимого
Еще один минус. И да, 190 Мб файл стоило бы перегнать в базу, если будет поиск тормозить.
leona
Авг. 25, 2012 16:25:45
odnochlen
190 Мб файл стоило бы перегнать в базу
а как это сделать? IDLE завис намертво, когда я просто через ElementTree попыталась вывести корневой каталог.
doza_and
Авг. 25, 2012 22:19:18
leona
попыталась вывести корневой каталог
Почему вы решили что IDLE завис? Приводите код. Иначе неясно что вы делали. Печать больших объемов данных в самом деле может занять много времени.
p.s.
:) скажите спасибо тому умнику который придумал хранить большие объемы данных в xml.