Pyenchant拼写检查:如何同时输出错误单词与原字符串
解决拼写检查关联原字符串与错误单词的问题
要实现原字符串和错误单词的对应输出,核心是要把每个待检查的字符串和它的拼写错误一一绑定——你之前的问题大概率是没把检查器和单个字符串做关联,导致无法正确获取对应的原文本。
直接给你调整后的代码思路和示例:
核心实现步骤
- 遍历你的字符串列表(或DataFrame中的文本列),逐个处理每个原字符串
- 对每个字符串,重新给
SpellChecker设置待检查文本 - 遍历当前字符串的所有拼写错误,输出时直接用当前循环的原字符串搭配错误单词
示例代码
针对字符串列表的基础版本
from enchant.checker import SpellChecker # 替换成你的字符串列表 text_list = ["这是一个拼写错误的字符串", "I love pyton", "Hello wrld"] # 注意语言参数:中文用zh_CN,英文用en_US,根据你的需求调整 spell_checker = SpellChecker("zh_CN") for original_text in text_list: # 给检查器设置当前要检查的原字符串 spell_checker.set_text(original_text) # 遍历当前字符串的所有拼写错误 for error in spell_checker: # 按照你想要的格式输出 print(f'"{original_text}" : {error.word}')
针对你代码里的数据库/场景版本
如果你的文本是从数据库读取到DataFrame中的,只要遍历DataFrame的文本列即可:
from enchant.checker import SpellChecker import pypyodbc as db import pandas as pd pd.set_option('max_rows', 10000) # 假设你已经从数据库读取到了DataFrame,比如叫df,文本列名为content # (这里省略数据库连接和读取的代码,你可以保留自己的逻辑) spell_checker = SpellChecker("zh_CN") for _, row in df.iterrows(): original_text = row['content'] spell_checker.set_text(original_text) for error in spell_checker: print(f'"{original_text}" : {error.word}')
为什么你之前的方法不对?
你用chkr.get_text()的时候,如果没有逐个给检查器设置单个字符串,它返回的可能是所有检查过的文本的拼接,或者是当前检查器缓存的最后一段文本,自然无法和单个错误对应上。而通过循环逐个绑定原字符串+检查器,就能精准关联每个错误所属的原文本了。
内容的提问来源于stack exchange,提问作者Tayyab Amin




