目录
本文章讲会讲解如何用python代码实现单词拼写错误的检查与纠正,并提供了完整的实现代码,我也将会给大家讲解实现的原理。
完整可运行代码:wm/拼写纠错
代码中包含了三套代码,分别是
单个单词纠错:我们已知这个是错误的,将其纠正成概率最大的单词
文章纠错:自动判断单词是否错误,如果判断拼写错误,将其纠正成最有可能是用户想要的单词。
拼写纠错:上面两套代码虽然也能实现纠错功能,但是原理上是做了简化的,这套代码讲最完整的实现纠错原理
1. 应用领域举例
为什么我要把具体应用的领域列举出来呢,主要是为大家更通俗理解本算法的功能,对本算法实现的目标有一个大致的了解。首先可以思考一下word的单词纠错功能,当我们将study输入成了studu后单词下方将会出现红色的波浪线,这就是单词检查功能,当我们知道这个单词打错后或者对应的拼音输入后有个字母确实没打对但是手机输入法却给了一个我们想要的答案,或者我们单词打错后系统大概率知道我们想要的单词,这就是单词纠错功能。这是非常具体的领域。这一节我们将从单词纠错与检查角度给大家解读一下这种功能的实现方案。
其实单词拼写检查功能是非常好实现的,无非就是检索语料库查找我们拼写的单词是否存在其中,我们本文章主要还是集中在如何找到用户希望拼写的单词上,有了这一原理根据错误拼音找到用户希望的词句也是轻而易举,不过这里不会提供。
我们会从单词纠错的原理开始开始讲解!也就是我们已知单词拼写错误了,然后猜测用户到底想拼写什么单词的原理讲解,然后结合单词检查对一篇文章进行单词改错。
2. 理解概念
首先要理解什么是:编辑距离
意思就是需要几次元操作才能得到想要的单词
元操作:1.替换 2.删除 3.插入 4.对换
举例:
- 'act' 与 'atc' 的编辑距离为1,因为我们需要对atc进行t和c一次交换就得到了act
- 'study'与 'stedys ' 的编辑距离为2,因为我们需要操作两次stedys才能得到study
3. 算法思想
通过编辑距离我们得到了一个量化标准,到底我们拼写的错误单词和另一个单词之间的距离有多远也就是编辑距离。然后我们就可以给出编辑距离最低的单词给到用户了,这个就是猜测用户最希望输入的单词了。那如何获取和输入错误单词编辑距离最低的单词呢?
3.1. 第一种:(笨方法)
将语料库的单词循环一遍,计算语料库里所有的单词和当前单词的编辑距离,然后返回编辑距离最小的单词,缺点很明显,语料库庞大,计算量巨大。
3.2. 第二种:
生成编辑距离1、2的单词:
用户输入单词,对错误单词进行元操作(替换 删除 插入 对换)操作,生成编辑距离为1的单词,在此基础上再进行操作生成编辑距离为2的单词,然后进行过滤选出最合适的字符串。
也就是说将错误单词studu生成编辑距离为1的备选单词study、astudu、studi.......然后根据编辑距离为1的单词生成编辑距离为2的单词。这样就生成了备选单词,但是备选单词那个的概率是最高的呢?用户最希望打出的呢?下面就介绍过滤单词:
过滤单词:
目的:给定一个字符串s假设是appl,要找出最有可能正确的字符串s假设是apple
贝叶斯定理:
P(c|s) = P(s|c)*P(c) / P(s)
翻译为:P(c|s) = P(s|c)*P(c) / P(s) 在用户希望写s也就是apple的情况下,不小心发生了事件c也就是写成了appl的概率是多少
如何处理?
因为我们最终需要一个数值,并且这个数值只做各个单词之间比较,并且P(s)对于我们来说是个常量,因为是用户现在给的概率就是1,所以我们只需要知道P(s|c)*P(c) 就可以了
P(s|c):对于一个正确的字符串c也就是apple,有多少人写成了s也就是appl
p(c):语料库中出现apple的概率是多少
通过语料库我们可以统计出:用户将apple输成appl或者applv的概率分别是多少,也就是P(s|c)*p(c)
总结:
我们将贝叶斯定理思想引入后发现最终我们只需进行一定的统计就可以得到我们想要的概率,我们将计算概率问题变成了一个统计问题从而将问题简单化。
4. 代码实现
下面的所有代码我已经放入我的gitee仓库中,代码可直接运行,有需要的可以自行下载
仓库地址:wm/拼写纠错

本文讲解如何用Python实现单词拼写错误的检查与纠正。先介绍应用领域,如Word的纠错功能;接着解释编辑距离概念;然后阐述两种算法思想,包括笨方法和基于贝叶斯定理的方法;最后给出代码实现,涵盖单个单词、文章纠错及拼写纠错,还提供了参考资料。
最低0.47元/天 解锁文章
1706





