Mit einem sehr besonderen Problem. Die Funktion extract
nimmt eine XML-Datei und erstellt ein Diktat mit Restaurantbewertungen als Schlüssel. Hier mache ich eine grundlegende Vorverarbeitung für den Text, da ich ihn für die Stimmungsanalyse verwende: Der Text wird in Token umgewandelt, die Interpunktion wird entfernt und vor dem Wiedereinfügen in das Diktat wird sie "un-tokenisiert".Warum führt die Vorverarbeitung dazu, dass ich Wörterbuchschlüssel verliere?
import string
from nltk.tokenize import word_tokenize, RegexpTokenizer
tokenizer = RegexpTokenizer(r'\w+')
def preprocess(file):
d = extract(file)
for text in list(d.keys()):
tokenized_text = tokenizer.tokenize(text)
text2 = ''.join([" "+i if not i.startswith("'") and i not in string.punctuation else i for i in tokenized_text]).strip()
d[text2] = d.pop(text)
return d
Von den 675 Bewertungen fehlen 2, nachdem diese Funktion ausgeführt wurde. Das sind "toller Service". und köstlich'. Ich würde erwarten, dass diese zurückgegeben werden, so wie sie sind, außer der Punkt sollte von der ersten entfernt werden.
Als Referenz die extract
Funktion:
from collections import OrderedDict, defaultdict
import xml.etree.ElementTree as ET
def extract(file):
tree = ET.parse(file)
root = tree.getroot()
if file == 'EN_REST_SB1_TEST.xml':
d = OrderedDict()
for sentence in root.findall('.//sentence'):
opinion = sentence.findall('.//Opinion')
if opinion == []:
text = sentence.find('text').text
d[text] = 0
return d
Wenn jemand mit den SemEval ABSA Aufgaben vertraut ist, beachten Sie die ich getan habe dies in einem etwas Umwegen, nicht die Verwendung der ID-Tags machen in der XML, aber ich würde lieber bleiben, wie ich es gemacht habe.
Sie verwenden die Bewertungen als Schlüssel, was bedeutet, dass Sie alle Duplikate verlieren. Könnte es sein, dass diese * sehr * kurzen Reviews zweimal auftraten? – alexis
Ja - das ist es. Sehr offensichtlich, jetzt denke ich darüber nach. Was wäre die beste Alternative? – user3058703
Um Ihren Ansatz so zu fixieren, dass er Ihren Zielen entspricht. Ich würde sie nur in einer Liste sammeln, aber ich kann es nicht sicher sagen, weil ich nicht weiß, was Sie erreichen wollen, warum Sie Werte als Schlüssel verwenden oder warum Sie dafür sorgen, dass Duplikate verloren gehen. Vielleicht eine neue Frage **, die die Aufgabe erklärt und nach der richtigen Datenstruktur fragt? – alexis