专栏首页小鹏的专栏[文本纠错] pycorrector框架测试

[文本纠错] pycorrector框架测试

pycorrector:https://github.com/shibing624/pycorrector

pycorrector

中文文本纠错工具。音似、形似错字(或变体字)纠正,可用于中文拼音、笔画输入法的错误纠正。python3.6开发。

pycorrector依据语言模型检测错别字位置,通过拼音音似特征、笔画五笔编辑距离特征及语言模型困惑度特征纠正错别字。

Question

中文文本纠错任务,常见错误类型包括:

  • 谐音字词,如 配副眼睛-配副眼镜
  • 混淆音字词,如 流浪织女-牛郎织女
  • 字词顺序颠倒,如 伍迪艾伦-艾伦伍迪
  • 字词补全,如 爱有天意-假如爱有天意
  • 形似字错误,如 高梁-高粱
  • 中文拼音全拼,如 xingfu-幸福
  • 中文拼音缩写,如 sz-深圳
  • 语法错误,如 想象难以-难以想象

当然,针对不同业务场景,这些问题并不一定全部存在,比如输入法中需要处理前四种,搜索引擎需要处理所有类型,语音识别后文本纠错只需要处理前两种, 其中’形似字错误’主要针对五笔或者笔画手写输入等。

Install

  • 全自动安装:pip install pycorrector
  • 半自动安装:
git clone https://github.com/shibing624/pycorrector.git
cd pycorrector
python setup.py install

通过以上两种方法的任何一种完成安装都可以。如果不想安装,可以下载github源码包,安装下面依赖再使用。

安装依赖

  • kenlm安装
pip install https://github.com/kpu/kenlm/archive/master.zip
  • 其他库包安装
pip install -r requirements.txt

Usage

  • 文本纠错
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)并放置于该位置。

  • 错误检测
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开始。

  • 关闭字粒度纠错
import pycorrector

error_sentence_1 = '我的喉咙发炎了要买点阿莫细林吃'
correct_sent = pycorrector.correct(error_sentence_1)
print(correct_sent)

output:

'我的喉咙发炎了要买点阿莫西林吉', [['细林', '西林', 12, 14], ['吃', '吉', 14, 15]]

上例中发生误纠,如下代码关闭字粒度纠错:

import pycorrector

error_sentence_1 = '我的喉咙发炎了要买点阿莫细林吃'
pycorrector.enable_char_error(enable=False)
correct_sent = pycorrector.correct(error_sentence_1)
print(correct_sent)

output:

'我的喉咙发炎了要买点阿莫西林吃', [['细林', '西林', 12, 14]]

默认字粒度、词粒度的纠错都打开,一般情况下单字错误发生较少,而且字粒度纠错准确率较低。关闭字粒度纠错,这样可以提高纠错准确率,提高纠错速度。

默认enable_char_error方法的enable参数为True,即打开错字纠正,这种方式可以召回字粒度错误,但是整体准确率会低;

如果追求准确率而不追求召回率的话,建议将enable设为False,仅使用错词纠正。

  • 加载自定义混淆集

通过加载自定义混淆集,支持用户纠正已知的错误,包括两方面功能:1)错误补召回;2)误杀加白。

import pycorrector

pycorrector.set_log_level('INFO')
error_sentences = [
    '买iPhone差,要多少钱',
    '共同实际控制人萧华、霍荣铨、张旗康',
]
for line in error_sentences:
    print(pycorrector.correct(line))

print('*' * 53)
pycorrector.set_custom_confusion_dict(path='./my_custom_confusion.txt')
for line in error_sentences:
    print(pycorrector.correct(line))

output:

('买iPhone差,要多少钱', [])   # "iPhone差"漏召,应该是"iphoneX"
('共同实际控制人萧华、霍荣铨、张启康', [['张旗康', '张启康', 14, 17]]) # "张启康"误杀,应该不用纠
*****************************************************
('买iPhoneX,要多少钱', [['iPhone差', 'iPhoneX', 1, 8]])
('共同实际控制人萧华、霍荣铨、张旗康', [])

具体demo见example/use_custom_confusion.py,其中./my_custom_confusion.txt的内容格式如下,以空格间隔:

iPhone差 iPhoneX 100
张旗康 张旗康

set_custom_confusion_dict方法的path参数为用户自定义混淆集文件路径。

  • 加载自定义语言模型

默认提供下载并使用的kenlm语言模型zh_giga.no_cna_cmn.prune01244.klm文件是2.8G,内存较小的电脑使用pycorrector程序可能会吃力些。

支持用户加载自己训练的kenlm语言模型,或使用2014版人民日报数据训练的模型,模型小(20M),准确率低些。

from pycorrector import Corrector

pwd_path = os.path.abspath(os.path.dirname(__file__))
lm_path = os.path.join(pwd_path, './people_chars_lm.klm')
model = Corrector(language_model_path=lm_path)

corrected_sent, detail = model.correct('少先队员因该为老人让坐')
print(corrected_sent, detail)

output:

少先队员应该为老人让座 [[('因该', '应该', 4, 6)], [('坐', '座', 10, 11)]]

具体demo见example/load_custom_language_model.py,其中./people_chars_lm.klm是自定义语言模型文件。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 自然语言处理-错字识别(基于Python)kenlm、pycorrector

    当然,针对不同业务场景,这些问题并不一定全部存在,比如输入法中需要处理前四种,搜索引擎需要处理所有类型,语音识别后文本纠错只需要处理前两种, 其中’形似字错误’...

    学到老
  • [文本纠错] pycorrector框架训练

    通过以上两种方法的任何一种完成安装都可以。如果不想安装,可以下载github源码包,安装下面依赖再使用。

    MachineLP
  • Soft-Masked BERT:文本纠错与BERT的最新结合

    地址 | https://zhuanlan.zhihu.com/p/144995580

    朴素人工智能
  • 基于语义关联的中文查询纠错框架

    本文作者:内部搜索平台部推荐中心组长,2009年加入腾讯,从事搜索相关工作,包括社区问答,网页搜索,音乐、视频、应用宝等项目,方向涉及query理解,文本相关性...

    腾讯技术工程官方号
  • 文本纠错与BERT的最新结合,Soft-Masked BERT

    1.http://www.doc88.com/p-8038708924257.html

    机器学习AI算法工程
  • java测试框架如何执行groovy脚本文件

    本人在写基于httpclient的测试框架时,用到了groovy脚本作为测试用例的脚本语言,自然就需要java执行上传的测试脚本,在看过实例之后,自己进行了封装...

    FunTester
  • pytest文档19-doctest测试框架

    doctest从字面意思上看,那就是文档测试。doctest是python里面自带的一个模块,它实际上是单元测试的一种。 官方解释:doctest 模块会搜索那...

    上海-悠悠
  • Apache Hadoop:通过重构降低技术债务

    如果没有将实际行动纳入代码来控制和解决技术债务的话,那么技术债务将一文不值。为了阐述这种能自动修正代码缺陷的能力,而这些缺陷恰恰又是增加这些意外债务的元凶,我们...

    用户1090667
  • Transformer自动纠语法、改论文,我们试了试这个免费英文写作新神器

    在当前疫情下,我们已经离不开居家学习了,各种备考也得提到日程上。机器之心的读者大多数都是理科生,数学、计算机都还是有一些「天赋」。然而对于英语,貌似这些天赋帮不...

    机器之心

扫码关注云+社区

领取腾讯云代金券