字典中存在键时出现 KeyError
KeyError when key exists in dictionary
我正在开发一种代码,可以检测推文的语言并应用与该语言匹配的词汇。代码过去工作得很好,它完成了它的工作。然后它抛出一个 KeyError: 'en'
即使 'en' 存在于字典中。我查看了多个已经有了答案的问题,但似乎没有任何效果。我将提供仅处理德语的代码部分(因此不包括其他语言)。如果检测到的语言不在字典中,代码将被写入 where,它将自动归类为英语。
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
行。
就像我说的,这之前工作得很好,但突然停止工作,尽管我完全没有对代码进行任何更改。
问题是,如果您遇到未知语言,那么您会执行 dic[lang] = {}
,然后立即执行 lang = "en"
。现在,如果 lang
例如 "es"
,您最终会得到 dic == {"es": {}}
和 lang == "en"
。稍后在代码中您执行 dic[lang][path] = diagnostic
但此时 "en" not in dic
因为它仍然使用未知语言代码 ("es"
)。您可能想要切换两个语句的顺序,即首先设置 lang = "en"
然后执行 dic[lang] = {}
.
我正在开发一种代码,可以检测推文的语言并应用与该语言匹配的词汇。代码过去工作得很好,它完成了它的工作。然后它抛出一个 KeyError: 'en'
即使 'en' 存在于字典中。我查看了多个已经有了答案的问题,但似乎没有任何效果。我将提供仅处理德语的代码部分(因此不包括其他语言)。如果检测到的语言不在字典中,代码将被写入 where,它将自动归类为英语。
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
行。
就像我说的,这之前工作得很好,但突然停止工作,尽管我完全没有对代码进行任何更改。
问题是,如果您遇到未知语言,那么您会执行 dic[lang] = {}
,然后立即执行 lang = "en"
。现在,如果 lang
例如 "es"
,您最终会得到 dic == {"es": {}}
和 lang == "en"
。稍后在代码中您执行 dic[lang][path] = diagnostic
但此时 "en" not in dic
因为它仍然使用未知语言代码 ("es"
)。您可能想要切换两个语句的顺序,即首先设置 lang = "en"
然后执行 dic[lang] = {}
.