SymSpell拼写校正函数运行报NameError: ss未定义问题求助
问题解决方法
你的报错和后续无校正效果的问题由三个错误共同导致:
- 作用域问题:
ss是spell_check函数内的局部变量,spell_corrector默认无法访问该变量,触发NameError - 重复初始化问题:你把
ss放到spell_corrector内单独初始化后,没有为该实例加载你的corpus.txt语料字典,无校正依据自然返回原词 - 参数调用错误:
spell_check的入参是text,但你分词时错误调用了全局变量message,参数逻辑错误,且原代码最后没有打印输出,也会导致你看不到校正结果
修正后完整代码
def spell_corrector(word_list, words_d, ss) -> str: result_list = [] for word in word_list: if word not in words_d: suggestion = ss.best_word(word, silent=True) if suggestion is not None: result_list.append(suggestion) else: result_list.append(word) return " ".join(result_list) def spell_check(text): ss = SymSpell(max_edit_distance=2) with open('corpus.txt') as bf: words = bf.readlines() chatbot_words = [word.strip() for word in words] all_words_list = list(set(chatbot_words)) silence = ss.create_dictionary_from_arr(all_words_list, token_pattern=r'.+') words_dict = {k: 0 for k in all_words_list} tokens = spacy_tokenize(text) # 修正参数调用错误 # 把加载完字典的ss实例传入spell_corrector correct_text = spell_corrector(tokens, words_dict, ss) return correct_text message = input("") result = spell_check(message) print(result) # 新增打印逻辑,输出校正结果
异常排查说明
如果调整后还是没有校正效果,可依次排查以下情况:
- 确认
corpus.txt路径正确,语料内容加载无异常 - 确认输入的错误词和语料库中对应正确词的编辑距离不超过你设置的
max_edit_distance=2 - 确认
spacy_tokenize分词函数运行正常,没有出现词语拆分、拼接错误的情况
内容的提问来源于stack exchange,提问作者elizzz
相关产品推荐
相关产品推荐

