本文对pycorrector源码规则部分的框架进行解析,可以下载作者xuming624源码进行深入学习。
一、初始化数据和模型_initialize_detector()
1、数据资源:
- word_freq通用字典(词:词频)
- custom_confusion混淆字典(变体:本体)
- custom_word_freq自定义字典(词:词频<可省略>)
- person_names人物字典
- place_names地址字典
- stopwords停用词字典
2、数据合并:合并4,5,6到3,合并3+到1
3、加载模型:加载kenml语言模型
二、文本处理detect()
1、是否为空
2、统一编码
utf-8 to unicode
3、文本格式化
完成全角转半角,大写转小写的工作
4、长句子切分为短句子split_2_short_text()
按除中英文数字+#&之外的内容分类;返回短句子:起始索引。例子:
- 输入:text = ‘我&们#很12+ok,哈哈哈。你呢!!啊’
- 输出:text_split = [’’, ‘我&们#很12+ok’, ‘,’, ‘哈哈哈’, ‘。’, ‘你呢’, ‘!!’, ‘啊’, ‘’]
三、错误检查detect_short()
1、混淆字典中查找
(1)直接搜索(字典映射)(源码时直接搜索,也可以尝试采用最大向前匹配的方法,提高查找速度)
2、分词后,查看是否在通用字典word_freq(big)
(1)数字、英文、非中文字符不判断为错误词
(2)通用字典里的词不判断为错误词
(3)通用字典中没有的词/字添加到不添加到错误词列表
3、语言模型检测疑似错误字
(1)n_gram计算局部得分ngram_score()
(2)MAD(Median Absolute Deviation)—异常点检测,找出可能的错误位置
- 过滤数字、英文、非中文字符is_filter_token()
- 停用词
(3)maybe_errors列表按错误字出现位置排序(list[list], [error_word, begin_pos, end_pos, error_type])
四、纠错模型
1、初始化数据和模型check_corrector_initialized()
2、文本处理
(1)是否为空
(2)统一编码convert_to_unicode()
(3)长句子切分为短句子split_2_short_text()
3、错误检查detect_short()
返回句子中的疑似错误信息,包括[词、位置、错误类型]maybe_errors
(1)从混淆字典中查找
(2)分词后,查看是否在通用字典word_freq(big)
(3)语言模型检测疑似错误字
4、纠错
(1)错误类型为混淆集错误。直接返回混淆字典对于内容
(2)取所有可能的正确词generate_items()
- 拼接相同拼音+相似字形_confusion_char_set()
- 分别对相同拼音\字形、混淆字以及1,2,2+进行字典映射
(3)通过语言模型纠正字词错误get_lm_correct_item()。取语言模型困惑度得分,越小句子越通顺(self.lm.perplexity(’ '.join(words)))