在今日头条编写文章的时候发现一个好用的功能,就是发文助手,当你写文章的时候,发文助手会实时监测文章中的错别字并给出修改建议,非常人性化,那么是怎么实现的呢,今天小编来讲讲怎么实现的 。
一、纠错思路
二、安装
要求python3.6版本通过以上两种方法的任何一种完成安装都可以。如果不想安装,可以下载github源码包,安装下面依赖再使用。
▶依赖安装
kenlm安装
pip install https://github.com/kpu/kenlm/archive/master.zip
其他库包安装
pip install -r requirements.txt
▉ 使用方法
▶文本纠错
import pycorrector corrected_sent, detail = pycorrector.correct('少先队员因该为老人让坐') print(corrected_sent, detail)程序运行后输出:
规则方法默认会从路径~/.pycorrector/datasets/zh_giga.no_cna_cmn.prune01244.klm加载kenlm语言模型文件,如果检测没有该文件,则程序会自动联网下载。当然也可以手动下载模型文件(2.8G)并放置于该位置。下载地址:
https://deepspeech.bj.bcebos.com/zh_lm/zh_giga.no_cna_cmn.prune01244.klm
▶错误检测
import pycorrector idx_errors = pycorrector.detect('少先队员因该为老人让坐') print(idx_errors)
返回类型是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)
程序输出
'我的喉咙发炎了要买点阿莫西林吉', [['细林', '西林', 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)
程序运行输出:
'我的喉咙发炎了要买点阿莫西林吃', [['细林', '西林', 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))
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)
import pycorrector sent_lst = ['what', 'hapenning', 'how', 'to', 'speling', 'it', 'you', 'can', 'gorrect', 'it'] for i in sent_lst: print(i, '=>', pycorrector.en_correct(i))
▶中文简繁互换
支持中文繁体到简体的转换,和简体到繁体的转换。
import pycorrector traditional_sentence = '憂郁的臺灣烏龜' simplified_sentence = pycorrector.traditional2simplified(traditional_sentence) print(traditional_sentence, '=>', simplified_sentence) simplified_sentence = '忧郁的台湾乌龟' traditional_sentence = pycorrector.simplified2traditional(simplified_sentence) print(simplified_sentence, '=>', traditional_sentence)
程序运行输出:
憂郁的臺灣烏龜 => 忧郁的台湾乌龟
忧郁的台湾乌龟 => 憂郁的臺灣烏龜
▶命令行模式
支持批量文本纠错。
python -m pycorrector -h usage: __main__.py [-h] -o OUTPUT [-n] [-d] input @description: positional arguments: input the input file path, file encode need utf-8. optional arguments: -h, --help show this help message and exit -o OUTPUT, --output OUTPUT the output file path. -n, --no_char disable char detect mode. -d, --detail print detail info
网友评论0