单词拼写检查器 C++实现

本文介绍了一个基于贝叶斯概率和编辑距离的C++实现的单词拼写检查器。当用户输入的单词不在语料库中时,通过进行删除、交换、增加和修改操作生成距离为1的候选单词,然后根据语料库中出现的频率选择最合理的单词返回。工程文件可在VS2010下编译运行,并包含语料库model.txt。
摘要由CSDN通过智能技术生成

前几天在微博上看到了谷歌某位写的一篇博客,如何写一个小巧的单词拼写检查器:http://norvig.com/spell-correct.html

由于英语水平的限制,以及不了解python,所以这边文章不敢保证和原文的思想完全一致。

我对原文的一些细节的地方,做了细微的修改(尽量不影响效果)。最大的一处修改为编辑距离,原文计算了编辑距离为2的所有单词,而这儿我只计算了距离为1的单词。(可以对我的代码稍作修改从而达到距离为2的单词:递归调用Enum函数)


不扯了,上干货---

用户输入一个单词w,返回一个正确的单词c(有可能为w),使得这种c(输入w的情况下)尽可能合理。

原理主要是贝叶斯概率公式,可以参见原文,这儿直接给出算法。

1.如果用户输入的w存在我们的语料库中,即可认为w是一个正确的单词(语料库的限制,不100%正确),故直接返回w;

2.如果w不存在语料库中,对w作距离为1的编辑,该编辑过程如下:

---删除。 每次删除w中的一个字符,于是我们得到若干个单词. 如abc, 我们可以得到bc,ac,ab三个新的单词,他们与原单词距离为1

---交换。依次交换每相邻的两个字符,如abc,我们可以得到bac acb。

---增加。每次增加一个新的字符(从a到z)如abc,我们可以得到多个单词,不一一列举:aabc,babc,cabc......aabc,abbc.......

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值