中文文本纠错算法--错别字纠正的二三事

转载:
https://zhuanlan.zhihu.com/p/40806718?utm_source=ZHShareTargetIDMore

几个现成的工具包:

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

简介:考虑了音似、形似错字(或变体字)纠正,可用于中文拼音、笔画输入法的错误纠正,能够给出给出出错位置。

语言模型:

Kenlm(统计语言模型工具)
RNNLM(TensorFlow、PaddlePaddle均有实现栈式双向LSTM的语言模型)
代码:

import pycorrector

corrected_sent, detail = pycorrector.correct(‘少先队员因该为老人让坐’)

print(corrected_sent, detail)

单词、短句效果:9/13 效果尚可

速度:0.366050 all, 0.028157692 avg ;

可扩展性:词典可扩展,可使用自己的语料进行训练,该repo使用的是人民日报数据。扩展性强。

测试样本效果:‘感帽了’,‘你儿字今年几岁了’, ‘少先队员因该为老人让坐’,‘随然今天很热’,‘传然给我’,‘呕土不止’,‘哈蜜瓜’,‘广州黄浦’,‘在 上 上面 上面 那 什么 啊’,‘呃 。 呃 ,啊,那用户名称是叫什么呢?’, ‘我生病了,咳数了好几天’, ‘对京东新人度大打折扣’,‘我想买哥苹果手机’

2. https://github.com/ccheng16/correction 10 months ago

简介:

使用语言模型计算句子或序列的合理性
bigram, trigram, 4-gram 结合,并对每个字的分数求平均以平滑每个字的得分
根据Median Absolute Deviation算出outlier分数,并结合jieba分词结果确定需要修改的范围
根据形近字、音近字构成的混淆集合列出候选字,并对需要修改的范围逐字改正
句子中的错误会使分词结果更加细碎,结合替换字之后的分词结果确定需要改正的字
探测句末语气词,如有错误直接改正
特点:

训练的语言模型很多,根据介绍看,整体比较完善,看起来高大上。不过code跑不起来,作者没回应—–后面再改一下作者代码,看看能否跑起来。

3. https://github.com/PengheLiu/Cn_Speck_Checker 2 years ago

简介:

针对医学数据训练出来的,基于编辑距离,可自行训练–效果一般,统计词频和共现信息,不太完善,返回大量candidates

特点:

人们通常越往后字打错的可能越大,因而可以考虑每个字在单词中的位置给予一定权重,这中方法有助于改进上面的第一种“传然”- "虽然"的情况;
考虑拼音的重要性,对汉语来讲,通常人们打错时拼音是拼对的,只是选择时候选择错了,因而对候选词也可以优先选择同拼音的字。

单词、短句效果:1/13 效果差,因为训练语料是医学文章

速度:None

可扩展性:词典+模型。扩展性还可以。

测试样本效果:‘感帽了’,‘你儿字今年几岁了’, ‘少先队员因该为老人让坐’,‘随然今天很热’,‘传然给我’,‘呕土不止’,‘哈蜜瓜’,‘广州黄浦’,‘在 上 上面 上面 那 什么 啊’,‘呃 。 呃 ,啊,那用户名称是叫什么呢?’, ‘我生病了,咳数了好几天’, ‘对京东新人度大打折扣’,‘我想买哥苹果手机’

4. proofreadv1 – 效果一般,主要用于搜索引擎中的搜索关键词的别字纠错 5 years ago

词频字典+bi-gram

https://github.com/apanly/proofreadv1

模型比较老旧,不考虑

5. https://github.com/taozhijiang/chinese_correct_wsd 3 years ago

京东客服机器人语料做的中文纠错–更接近我们的应用场景,主要解决同音自动纠错问

题,比如:

对京东新人度大打折扣 – > 对京东信任度大打折扣

我想买哥苹果手机 纠正句:我想买个苹果手机

但代码多年未更新,目前跑不起来。

6. https://github.com/beyondacm/Autochecker4Chinese 9 months ago

original sentence:感帽,随然,传然,呕土

corrected sentence:感冒,虽然,传染,呕吐

original sentence:对京东新人度大打折扣,我想买哥苹果手机

corrected sentence:对京东新人度大打折扣,我国买卖苹果手机

单词、短句效果:5/13 效果差

速度:2.860311 all , 0.220023 avg; with print

可扩展性:词典可扩展,不使用自己的语料进行训练。扩展性一般。

测试样本效果:‘感帽了’,‘你儿字今年几岁了’, ‘少先队员因该为老人让坐’,‘随然今天很热’,‘传然给我’,‘呕土不止’,‘哈蜜瓜’,‘广州黄浦’,‘在 上 上面 上面 那 什么 啊’,‘呃 。 呃 ,啊,那用户名称是叫什么呢?’, ‘我生病了,咳数了好几天’, ‘对京东新人度大打折扣’,‘我想买哥苹果手机’

7. https://github.com/SeanLee97/xmnlp 3-4 months ago

nlp工具包,包含分词、情感分析,没有专注于错别字纠正,效果较差

单词、短句效果:3/13 效果差

速度:2.860311 all , 0.220023 avg; without print: 0:00:00.000017 all

可扩展性:既没发现词典、也没发现模型。扩展性较差。

测试样本效果:‘感帽了’,‘你儿字今年几岁了’, ‘少先队员因该为老人让坐’,‘随然今天很热’,‘传然给我’,‘呕土不止’,‘哈蜜瓜’,‘广州黄浦’,‘在 上 上面 上面 那 什么 啊’,‘呃 。 呃 ,啊,那用户名称是叫什么呢?’, ‘我生病了,咳数了好几天’, ‘对京东新人度大打折扣’,‘我想买哥苹果手机’

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python可以通过使用一些算法和技术来生成同音字、同形字和形似字。下面是一些常见的方法: 一、同音字生成: 1. 利用汉字拼音库进行同音字生成。可以使用python的拼音库,如xpinyin,将汉字转换成拼音,然后根据拼音找到相同读音的字。 二、同形字生成: 1. 利用字形结构进行同形字生成。可以使用python的字形库,如pyfontaine,通过比较字的笔画结构、部首等信息,找到相同或相似的字形。 三、形似字生成: 1. 利用相似度算法进行形似字生成。可以使用python的相似度计算方法,如余弦相似度、编辑距离等,对字形进行比较,找到相似度较高的字。 以上方法只是简单介绍了一些生成同音字、同形字和形似字的方法,实际操作中需要根据具体需求进行选择和实现。另外,这些生成结果只是近似的结果,可能存在一些误差,需要结合具体情况进行使用和判断。 ### 回答2: Python可以生成同音字、同形字和形似字,可以使用一些自然语言处理或文本处理的库和算法。 对于生成同音字,可以利用汉字的拼音和声母韵母的对应关系,通过替换声母或韵母来生成同音字。可以使用Python的拼音库,比如pypinyin库,通过指定相同的拼音来生成同音字。例如,可以将"爸"替换为"叭"、"妈"替换为"吗"。 对于生成同形字,可以利用汉字的组成结构和笔画信息,通过替换部首、偏旁部首或者变换笔画顺序来生成同形字。可以使用Python的字库或者字形库,可以通过读取字库的部首信息和笔画顺序,进行相应的替换和变换。例如,可以将"人"替换为"从"、"心"替换为"忄"。 对于生成形似字,可以利用汉字的形状和结构相似的特点,通过替换具有形状相似的部首、变换部首的位置或者变换部首中的一些笔画来生成形似字。可以使用Python的字库或者字形库,读取部首结构和笔画信息,进行相应的替换和变换。例如,可以将"年"替换为"广"、"生"替换为"田"。 需要注意的是,生成同音字、同形字和形似字是一种技术手段,在实际应用中需要结合具体场景和需求,以及对字库、字形等相关信息的准确性和完整性的要求。 ### 回答3: Python可以通过字库和一些规则来生成同音字、同形字和形似字。首先,需要一个包含各种字的字库,可以是一个文本文件或者数据库。然后,可以使用正则表达式或其他方法根据某个字的读音、拼音或笔画等特征,来搜索并生成同音字、同形字和形似字。 对于同音字生成,可以通过匹配拼音或音韵来实现。例如,可以使用第三方库pypinyin来将汉字转换为拼音,然后根据相同的拼音来生成同音字。 对于同形字和形似字生成,可以根据字的结构和笔画来匹配和生成。例如,可以使用笔画库来获取某个字的笔画数和结构信息,然后根据相同的笔画数和结构来生成同形字和形似字。 另外,还可以结合机器学习的方法来生成同音字、同形字和形似字。可以使用已经标注好的同音字、同形字和形似字的数据集来训练一个模型,然后使用该模型来生成新的字。 需要注意的是,生成的同音字、同形字和形似字可能不一定是真实存在的字,而只是根据某些规则生成的近似字。因此,在使用生成的字时需要谨慎,尤其是在涉及重要的文字内容或商标注册等领域。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值