文本纠错工具—Pycorrector框架测试

发表于:2020-7-23 10:48

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:MachineLP    来源:CSDN

  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是自定义语言模型文件。

      本文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号