Найти - Пользователи
Полная версия: поиск в XML базе данных
Начало » Python для новичков » поиск в XML базе данных
1 2
leona
Всем привет !

Подскажите, пожалуйста, что целенаправленно почитать по поиску в XML-документе с помощью пайтона. XPath, DOM, SAX….
Непрофессиональный программист, с азами XML вроде разобралась.
Моя задача заключается в том, чтобы сопоставить словарь (список слов в txt) с текстовой базой (которая в XML) и вывести, при наличии слова в базе данных, искомое слово и его ближайший контекст (к примеру, искомое слово “кошка”, в базе оно представлено в контексте “пушистая”. Вот это сочетание и нужно вывести в отдельный файл). Может, кто-нибудь знает уже готовые “рецепты” по этой теме.

Буду очень признательна!

Спасибо!
odnochlen
DOM вроде самое простое.
Пример xml файла есть?
leona
там 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
Мда. Я не спец, но думаю что проблема в том что xml это совсем не база данных.
Дальше зависит от задачи:
1 Однократно надо поработать со списком слов.
Тогда- прочитать весь xml (тут лучше SAX технология) в родные питоновские словари и сделать все что надо уже в памяти, благо ваши данные туда поместятся.
2 Задача будет возникать многократно. Тогда лучше перегнать данные в нормальную базу (однократное чтение xml), любую которая вам приятнее, и работу выполнять с ее использованием. (это позволит избежать полного чтения данных при старте программы).
odnochlen
doza_and
но думаю что проблема в том что xml это совсем не база данных.
А у нас как раз предмет был - xml базы данных. И там про xpath было
И гугл про это что-то слышал
Про них я, правда, не очень хорошие вещи слышал. Что и для человека они становятся практически нечитаемы, и при изменении приходится перезаписывать всю базу.

ТС, если тебе надо найти в xml что-то, то тут скорее xpath. Или перегнать в SQL базу данный.
leona
оу, спасибо за советы. а где почитать про это можно, чтоб вменяемо написано было?

есть вот такая штука LT XML (изначально под C, но есть и пайтоновская версия теперь). кто-нибудь сталкивался с этим инструментом в русскоязычной части web? он специально для text processing разработан, насколько поняла.
doza_and
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
doza_and
индексируемость содержимого
Еще один минус. И да, 190 Мб файл стоило бы перегнать в базу, если будет поиск тормозить.
leona
odnochlen
190 Мб файл стоило бы перегнать в базу
а как это сделать? IDLE завис намертво, когда я просто через ElementTree попыталась вывести корневой каталог.
doza_and
leona
попыталась вывести корневой каталог
Почему вы решили что IDLE завис? Приводите код. Иначе неясно что вы делали. Печать больших объемов данных в самом деле может занять много времени.

p.s.
:) скажите спасибо тому умнику который придумал хранить большие объемы данных в xml.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB