文字错误类别:多字 少字 形近字
文本纠错思路
简单:
一、构建自定义词典,提高分词正确率。不在词典中,也不是停用词,分成单字的数据极有可能是错字(少部分可能是新词)。错字与前后的词语组成错词 (分词工具:cutword)
二、利用字形相似度获取错词的字形最相似词语 参考: https://github.com/tiantian91091317/OCR-Corrector(FASPell采用字符串编辑距离进行计算 )
难点:
字形相似度计算还不够准
错字与前后的词语组成的错词可能不准确
需要不断维护词典
jieba有HMM新词算法,错词无法单独分出来
cutword 词典的一些词 对于 特定领域 可能是错词,需要删除
# baidu lac
from LAC import LAC
# 装载LAC模型
lac = LAC(mode='lac')
# 单个样本输入,输入为Unicode编码的字符串
text = u"含固书馆学、档案学"
lac_result = lac.run(text)
lac_result
# [['含', '固书馆学', '、', '档案学'], ['v', 'n', 'w', 'n']]
对于部分文本效果不错,但是还有部分文本实体识别粒度太大,比如:
paddlenlp
taskflow.md
容易出现实体识别不出的情况,弃用
# 批量样本输入, 输入为多个句子组成的list,平均速率更快
texts = [u"LAC是个优秀的分词工具", u"百度是一家高科技公司"]
lac_result = lac.run(texts)
# paddle nlp Taskflow
from pprint import pprint
from paddlenlp import Taskflow
schema = ['专业名称', '地点', '人名','学校名称','班级名称'] # Define the schema for entity extraction
ie = Taskflow('information_extraction', schema=schema)
sentence = '中外合作办学,新西兰尼尔森马尔佰勤理工学院合作办学'
sentence = '日语、俄语、德语、法语、西班牙语,人校后可参与选拨项目:涉外法治双主学位项目、国际新闻全英文实验班:各语种均有机会进人自标语言国著名高校进行交流学习'
pprint(ie(sentence))
目标:通过正确数据对错误数据进行检测与纠正
错字检测+修正:
检测错字:
参考:
kenLM统计语言模型构建与应用
kenlm
kemlm检错原理:利用 2-gram 、3-gram 语言模型找到错误位置;
利用形近字字表生成候选句(对应上文的使P(O|I)最大的n个 Input);
利用语言困惑度找到得分最低的候选句(对应上文的使P(I)最大的Input)。
使用pycorrector项目加入专有名词字典后(数量大概有几万),检索速度太太太慢。并且训练kenlm模型正确数据不够。所以放弃kenlm.
待正确数据更多后,再训练bert模型
更多【ocr-OCR文本纠错思路】相关视频教程:www.yxfzedu.com