Я работаю над кодом, который определяет язык твита и применяет лексическое соответствие этому языку. Код USED работал нормально, он сделал свою работу. Затем он выдал KeyError: 'en'
, хотя в словаре существует 'en'. Я просмотрел несколько вопросов, на которые уже есть ответы, и, похоже, в них ничего не работает. Я предоставлю часть кода, относящуюся только к немецкому языку (без учета других языков). Код записывается туда, где, если обнаруженный язык отсутствует в словаре, он автоматически классифицируется как английский.
from langdetect import detect
import glob
import re
rsc_lg = {
"de" : {"pos" : "ressources/positive_words_de.txt",
"neg" : "ressources/negative_words_de.txt"},
"en" : {"pos" : "ressources/positive_words_en.txt",
"neg" : "ressources/negative_words_en.txt"}
}
dic = {}
liste_resultats = []
for path in glob.glob("corpus/*/*/*"):
f = open(path, errors="ignore")
read = f.read().lower()
lang = detect(read)
if lang not in dic:
dic[lang] = {}
if lang not in rsc_lg :
lang = "en"
###german###
f_de_pos = open(rsc_lg[lang]["pos"])
f_de_neg = open(rsc_lg[lang]["neg"])
de_pos = f_de_pos.read().lower().split()
de_neg = f_de_neg.read().lower().split()
f_de_pos.close()
f_de_neg.close()
words = read.split()
pos_words_de = set(words) & set(de_pos)
neg_words_de = set(words) & set(de_neg)
if len(pos_words_de) > len(neg_words_de):
diagnostic = "positive"
if len(pos_words_de) == len(neg_words_de):
diagnostic = "mixed"
if len(pos_words_de) < len(neg_words_de):
diagnostic = "negative"
# print("this german tweet is ", diagnostic)
dic[lang][path] = diagnostic
corpus, lang, classe, nom = re.split("\\\\", path)
liste_resultats.append([nom, lang, classe, diagnostic])
import json
w = open("resultats_langdetect_german.json", "w")
w.write(json.dumps(liste_resultats, indent= 2))
w.close()
f.close()
print("done")
Ошибка возникает со строкой dic[lang][path] = diagnostic
сразу после классификации твитов как положительных, смешанных или отрицательных. Как я уже сказал, раньше это работало нормально и внезапно перестало работать, несмотря на то, что я не вносил абсолютно никаких изменений в код.