c语言英文拼写检查器,c – 简单的拼写检查算法
解决问题的简单方法确实是预先计算好的地图[坏词] – > [建议].
问题在于,虽然删除一个字母会产生很少的“坏词”,但对于添加或替换,你有很多候选人.
所以我建议另一个解决方案;)
解决方案以增量步骤描述,通常搜索速度应该在每个想法中不断改进,并且我尝试首先使用更简单的想法(在实现方面)来组织它们.每当您对结果感到满意时,请随时停下来.
0.初步
>实施Levenshtein距离算法
>将字典存储在排序的序列中(例如std :: set,尽管排序的std :: deque或std :: vector会更好地表现性能)
关键点:
> Levenshtein距离计算使用数组,在每一步中,下一行仅使用前一行计算
>行中的最小距离始终优于(或等于)前一行中的最小值
后一个属性允许短路实现:如果您想将自己限制为2个错误(阈值),那么只要当前行的最小值优于2,您就可以放弃计算.一个简单的策略是将阈值1作为距离返回.
1.第一个暂定
让我们开始吧.
我们将实现一个线性扫描:对于每个单词,我们计算距离(短路),并列出那些到目前为止达到较小距离的单词.
它对小词典非常有效.
2.改进数据结构
levenshtein距离至少等于长度的差异.
通过使用夫妻(长度,单词)而不仅仅是单词作为键,您可以将搜索限制在长度范围[长度 – 编辑,长度编辑]并大大减少搜索空间.
3.前缀和修剪
为了改进这一点,我们可以说,当我们逐行构建距离矩阵时,一个世界被完全扫描(我们寻找的那个)但另一个(指示物)不是:我们每行只使用一个字母.
这个非常重要的属性意味着对于共享相同初始序列(前缀)的两个指示对象,则矩阵的第一行将是相同的.
请记住,我要求您存储字典排序?这意味着共享相同前缀的单词是相邻的.
假设你正在检查你的单词与卡通和在车上你意识到它不起作用(距离已经太长),那么任何以汽车开头的单词也不起作用,你可以跳过单词,只要他们从汽车开始.
跳过本身可以线性地或通过搜索完成(找到比汽车具有更高前缀的第一个单词):
>如果前缀很长(几个要跳过的单词),线性效果最佳
>二分搜索最适合短前缀(许多单词要跳过)
多长时间取决于你的字典,你必须衡量.我会继续二进制搜索.
注意:长度分区对前缀分区起作用,但它会修剪更多的搜索空间
4.前缀和重复使用
现在,我们还将尝试尽可能多地重复使用计算(而不仅仅是“它不起作用”的结果)
假设你有两个词:
>卡通
>洗车
您首先逐行计算矩阵,用于卡通.然后在阅读洗车时,你需要确定公共前缀的长度(这里是汽车),你可以保留矩阵的前4行(对应于void,c,a,r).
因此,当开始计算洗车时,你实际上开始迭代w.
要做到这一点,只需使用在搜索开始时直接分配的数组,并使其足够大以容纳更大的引用(您应该知道字典中最大的长度).
5.使用“更好”的数据结构
为了更轻松地使用前缀,您可以使用Trie或Patricia树来存储字典.然而,它不是STL数据结构,您需要对其进行扩充以在每个子树中存储存储的字长度范围,因此您必须自己实现.它并不像看起来那么容易,因为存在可能会破坏地方的内存爆炸问题.
这是最后的选择.实施成本很高.
c语言英文拼写检查器,c – 简单的拼写检查算法相关推荐
- 拼写检查 java_一个简单的拼写检查器
记得以前就看过这篇文章:How to write a spelling corrector,文章将贝叶斯原理运用于拼写检查,二十几行简单的Python的代码就实现了一个拼写检查器. 原作者python ...
- java 拼写检查器,怎样写一个拼写检查器(java版)
下面是拼写检查器很好的文章,本文参照该文,将实现java版 整个拼写检查器的基础就是贝叶斯概率模型 我简单的介绍一下它的工作原理. 给定一个单词, 我们的任务是选择和它最相似的拼写正确的单词. (如果 ...
- C语言自制文件分割器(简单)
记得初中的时候用MP3看电子书,MP3支持的文本文档格式不能超过1M,否则打不开,然后在网上下了一个文件分割器,感觉真的很强大啊(别吐槽,当时真的很白). 等自己学了C语言后,便想自己弄一个文件分割器 ...
- 介绍 Java 平台的 Jazzy:一种新的拼写检查器 API
计算机擅长执行快速搜索操作,可以根据给定的搜索词,对大量存储的信息快速进行搜索.但是,拼写检查应用程序所要求的搜索能力,不仅仅是正确的字符串匹配.在这篇文章中,我将介绍搜索算法的一些历史,包括语音匹配 ...
- Jazzy--一种新的拼写检查器API(Java平台)
计算机擅长执行快速搜索操作,可以根据给定的搜索词,对大量存储的信息快速进行搜索.但是,拼写检查应用程序所要求的搜索能力,不仅仅是正确的字符串匹配. 在这篇文章中,我将介绍搜索算法的一些历史,包括语音匹 ...
- Visual Studio 17.5 拼写检查器预览版现已推出,来说说你的看法吧
写在前面: Visual Studio17.5版本已添加拼写检查器功能,Visual Studio 中的许多功能旨在帮助你编写所需的代码.Visual Studio帮助你确保代码的编译,甚至可以帮助代 ...
- matlab清除所有数据,清除仿真数据检查器中的所有数据
将数据记录到仿真数据检查器 此示例将模型 slexAircraftExample 的仿真数据记录到仿真数据检查器.该模型未配置为记录数据.加载该模型,并标记 Stick.alpha, rad 和 q, ...
- OpenCV使用神经网络检测颜色检查器
OpenCV使用神经网络检测颜色检查器 使用神经网络检测颜色检查器 建造Building 示例的源代码 解释 设置标题和名称空间 创建检测器对象 加载模型 (可选)将dnn后端设置为CUDA 运行检测 ...
- OpenCV使用基本算法检测颜色检查器
OpenCV使用基本算法检测颜色检查器 使用基本算法检测颜色检查器 简介 建造Building 示例的源代码 解释 设置标题和名称空间 创建检测器对象 运行检测器 获取ColorCheckers列表 ...
- MySQL Shell系列——升级检查器
MySQL Shell提供了一套工具集,用户可以利用这套工具集完成不同的MySQL 任务.在这一篇文章里,将为读者介绍升级检查器. 用户可以使用升级检查器来检查MySQL 5.7服务器实例,以及MyS ...
最新文章
- LPMS_IMU在TX2上使用
- Latex 中连加符号的上下界问题总结
- JavaScript的Generator理解使用
- mysqli与pdo防sql注入源码
- docker-compose部署Minio
- 循环变量到底应该使用int还是unsigned int?
- linux 查看libevent 安装目录,Linux系统centos6.7上安装libevent
- HTML和XHTML解析(HTMLParser、BeautifulSoup)
- [Java][Android][Process] Process 创建+控制+分析 经验浅谈
- python中jieba库安装中出现pip库需要更新怎么办_python安装jieba库
- spurious wakeup -- 多线程之虚假唤醒
- Excel中28个基本图
- 计算机视觉之图像分类
- arduino自制cnc绘图仪_Arduino + 光驱改造数控绘图机
- java 16进制与汉字_汉字转16进制方法
- 51系列单片机指令快速记忆法
- Happy Hours, Happy Days
- 解决animate.css在谷歌浏览器下无效
- Hibernate Envers
- ps如何实现阳光照射效果
热门文章
- plot画图颜色设置
- 蓝奏云自定义域名链接替换网站源码
- 天下3各服务器最新互转查询,转服必看 大荒最新服务器火爆度排行榜
- 【进制转换】如何使用C++将2进制转换为16进制?
- MHL技术剖析,比HDMI更强【转】
- html日志网页,以HTML为表现的日志记录组件
- java fact函数_Fact 定义一个类Fact表示无符号有理数(分数) 联合开发网 - pudn.com...
- 小米路由器 mini 有线中继设置教程
- 完美安装运行Xcelsius 2008 SP3解决方案
- Python中的六种基本数据类型