Я хотел бы добавить вывод в части правового речи Tagger в существующий файл XML с POS-тегов как пары значений атрибутов в существующий текстовый элемент:Добавить POS-теги в качестве атрибута элемента XML
house/N + <w>house</w> --> <w pos="N">house</w>
Я думал, что я мог бы дать уникальные идентификаторы слова, совпадают, а затем добавить POS-тег в существующий файл XML, поэтому я разработал следующую функцию в Python:
import xml.etree.ElementTree as ET
def add_postags(POSfile, xmlfile):
"""
Function that takes two arguments (POSfile, xmlfile).
If the value of the word <w>'s attribute 'id' in the POSfile matches
the value of 'id' in the existing xml file,
it adds the pos tags that are stored as attribute-value pairs in (POSfile)
to the xml file and writes this to a new document 'xmlPOS'.
"""
treePOS = ET.parse(POSfile)
rootPOS = treePOS.getroot()
tree = ET.parse(xmlfile)
root = tree.getroot()
for w in rootPOS.iter('w'):
idPOS = w.get('id')
for w in root.iter('w'):
idxml = w.get('id')
for w in rootPOS.iter('w'):
POSval = w.get('pos')
if idPOS == idxml:
w.set('pos', POSval)
tree.write('xmlPOS.xml')
return xmlPOS
для этой работы я 'd необходимо преобразовать вывод тегатора' house/N 'в формат xml:
<w id="1" pos="N">house</w>
Но даже если я это сделаю, а затем импортирую вышеуказанный модуль в Python, я, похоже, не могу добавить теги POS в существующий xml-файл (который, конечно, содержит более редакционную разметку, чем приведенный выше пример). Возможно, я должен использовать XSLT вместо этого Python xml parser? Я еще не очень хорошо знаком с XSLT, поэтому решил, что сначала попробую это на Python.
Любые комментарии или предложения будут высоко оценены: спасибо заранее!
Спасибо вам большое! Похоже, что это работает над моим упрощенным тестовым файлом. Теперь я попытаюсь заставить его работать с фактическими файлами с большим количеством элементов и атрибутов, которые ему нужно будет пропустить. Ваш фрагмент кода - большая помощь: очень ценится! – lothelanor
Хорошо, теперь я считаю, что это работает для тестового файла только потому, что все слова в этом маленьком файле образца уникальны. Однако в фактическом тексте это не так, поэтому я в первую очередь дал уникальные идентификаторы, чтобы я мог их сопоставить. Например. слово «играть» на английском языке иногда имеет POS-тег «N (oun)», а иногда POS-тег «V (erb)» в зависимости от контекста, поэтому, если я сохраню их в словаре, как вы предлагаете, это уникальный контекст потерян, не так ли? Вот почему я думал, что должен добавить уникальные идентификаторы, но, возможно, есть способ построить это в нем? – lothelanor
Чтобы определить часть речи по контексту, потребуется обработка естественного языка, что будет значительно более сложным алгоритмом, чем мы говорили. Вероятно, самый простой подход, который мог бы быть на 90% точным (грубые цифры), - это сделать n-граммовый анализ, где вы ищете пары слов и сопоставляете их с парами частей речи. Например, «дети играют» всегда будут существительным-глаголом. Мало того, что это увеличивает сложность альгортма, но набор данных должен быть намного больше, потому что для поиска более чем двух словных комбинаций существует намного больше двух слов. –