Hi!大家好呀!我是你们努力的喵哥!
大家在输入文字时,有没有经常输错文字的情况?我们中文简体字是非常复杂的。有很多形近字、读音相同字、使用场景相同的字,特别是一个字或词有多个释义。所有,我们就容易输错字。即使是手书,别字的概率也是非常高的。还别说,地名、人名和方言,更是别字的重灾区。
虽然现在的中文输入法,已经非常的智能。但是,在我们输入的时候,输入法一般是不会进行上下文分析的。特别,像是我们录入一些信息时,输入法也获取不了我们的上下文。
所以,大部分互联网产品在设计文本输入功能时,为了提升用户的体验,都会考虑中文纠错功能。今天,喵哥就给大家推荐一款中文纠错项目。方便大家在工作或设计自己的小项目,能够快速使用。同时该项目,比较简洁的,也可以作为自然语言处理和分词的学习范例。
喵哥推荐的就是 pycorrector。一款国人开发的中文纠错项目。该项目是基于 Python 3.6 实现的。技术上采用了 Kenlm(统计语言模型工具)和 RNNLM(TensorFlow有实现栈式双向LSTM的语言模型)。pycorrector依据语言模型检测错别字位置,通过拼音音似特征、笔画五笔编辑距离特征及语言模型困惑度特征纠正错别字。
pycorrector 主要解决以下的中文输入场景。
谐音字词,如 配副眼睛-配副眼镜。
混淆音字词,如 流浪织女-牛郎织女。
字词顺序颠倒,如 伍迪艾伦-艾伦伍迪。
字词补全,如 爱有天意-假如爱有天意。
形似字错误,如 高梁-高粱。
中文拼音全拼,如 xingfu-幸福。
中文拼音缩写,如 sz-深圳。
语法错误,如 想象难以-难以想象。
我们可以在项目提供的在线网站中,体验整个项目的效果。在项目提供的在线网站中,还能找到一些其它的自然语言处理项目。
在线地址:https://www.borntowin.cn/product/corrector/
该项目的设计思路是,将中文纠错分为两步走。一是错误检测,二是错误纠正。
错误检测部分先通过结巴中文分词器切词,由于句子中含有错别字,所以切词结果往往会有切分错误的情况,这样从字粒度和词粒度两方面检测错误, 整合这两种粒度的疑似错误结果,形成疑似错误位置候选集。
错误纠正部分,是遍历所有的疑似错误位置,并使用音似、形似词典替换错误位置的词,然后通过语言模型计算句子困惑度,对所有候选集结果比较并排序,得到最优纠正词。
安装
可以使用 pip 安装。
pip install pycorrector
也可以下载源码后手动安装。
git clone https://github.com/shibing624/pycorrector.git
cd pycorrector
python setup.py install
依赖库kenlm安装。
pip install https://github.com/kpu/kenlm/archive/master.zip
其他依赖库包安装。
pip install -r requirements.txt
使用例子
1.文本纠错
import pycorrector
corrected_sent, detail = pycorrector.correct('少先队员因该为老人让坐')
print(corrected_sent, detail)
output:
少先队员应该为老人让座 [[('因该', '应该', 4, 6)], [('坐', '座', 10, 11)]]
规则方法默认会从路径~/.pycorrector/datasets/zh_giga.no_cna_cmn.prune01244.klm加载kenlm语言模型文件,如果检测没有该文件,则程序会自动联网下载。当然也可以手动下载模型文件(2.8G)并放置于该位置。
2.错误检测
import pycorrector
idx_errors = pycorrector.detect('少先队员因该为老人让坐')
print(idx_errors)
output:
[['因该', 4, 6, 'word'], ['坐', 10, 11, 'char']]
返回类型是list, [error_word, begin_pos, end_pos, error_type],pos索引位置以0开始。
其它更多的使用方式和实现的功能,大家可以去翻看项目的文档。
最后
惯例介绍一下项目本身。pycorrector项目的发起人是徐明,共有三位贡献者。pycorrector 已经维护了两年多,在 Github 收获了1.3k Star。在一些小产品和个人工具中,已有一定的应用。
网友评论