Общая идея - написать скрипт, сравнивающий слова из начального списка со словами в высказывании.Поэтому я попытался
- [x] проанализировать xml-файл
- [x] сделать панду DataFrame
- [] сравнить его с набором сохраненных словв переменной с именем "hedge"
- [] выделите слова, совпадающие со словами, хранящимися в переменной
- [], верните совпадающее "высказывание" с "name" и "id"
- [x] записать все в файл (xml или csv)
Структура xml структурирована следующим образом:
<section name="thisisaxml-file">
<topic>
<utterance name="John Doe" id="264">
foo bar?
</utterance>
<utterance name="Henry Parker" id="265">
foo foo bar. New York, wind.
</utterance>
</topic>
</section>
Из-за моей изумительнойя учил навыкам питона, вот что я придумал:
import pandas as pd
import xml.etree.ElementTree as ET
import nltk
from nltk.tokenize import word_tokenize
#xml file data input
xml_data = 'sample.xml'
#create an ElementTree object
etree = ET.parse(xml_data)
doc_df = pd.DataFrame(list(iter_docs(etree.getroot())))
hedge = ['foo', 'wind', 'base']
df = pd.DataFrame({'utterance': doc_df['utterance']})
df['id'] = pd.DataFrame({'id': doc_df['id']})
df['name'] = pd.DataFrame({'name': doc_df['name']})
df['tokenized_sents'] = df.apply(lambda row: word_tokenize(row['utterance']), axis=1)
df['sents_length'] = df.apply(lambda row: len(row['tokenized_sents']), axis=1)
final = df[df.tokenized_sents.apply(lambda x: hedge in x)]
final.to_csv('out.csv', sep='\t', encoding='utf-8') #prints to file
Есть несколько проблем, с которыми я столкнулся:
df['tokenized_sents'].lower()
не работает, потому что (я думаю,) формата списка в pd.DataFrame(list(iter_docs(etree.getroot())))
df[df.tokenized_sents.apply(lambda x: hedge in x)]
работает, но ничего не возвращает, но если вы используете строку, это работает. - попытался выделить найденные слова, не удалось
Так что в общем я хотел бы проверить список слов по конкретному столбцу в пандах.Хотя я видел похожие темы на этом сайте, ни одно из упомянутых решений пока не работает для меня.
У вас есть идеи для меня?