java 实现中英文拼写检查和错误纠正?可我只会写 CRUD 啊!
拼写纠正系列NLP 中文拼写检测实现思路
NLP 中文拼写检测纠正算法整理
NLP 英文拼写算法,假如提拔 100W 倍的性能?
NLP 中文拼写检测纠正 Paper
java 实现中英文拼写检查和错误纠正?可我只会写 CRUD 啊!
一个提拔英文单词拼写检测性能 1000 倍的算法?
单词拼写纠正-03-leetcode edit-distance 72.力扣编辑距离
开源项目
nlp-hanzi-similar 汉字相似度
word-checker 拼写检测
sensitive-word 敏感词
简单的需求
临近放工,小明忙完了本日的任务,正准备放工回家。
一条消息闪烁了起来。
“最近发现公众号的拼写检查功能不错,帮助用户发现错别字,体验不错。给我们系统也做一个。”
看着这条消息,小明在内心默默问候了一句。
“我 TND 的会做这个,就直接去人家总部上班了,在这受你的气。”
“好的”,小明回复到,“我先看看”
本日,天王老子来了我也得放工,耶稣也留不住。
https://img2024.cnblogs.com/other/1436333/202412/1436333-20241208152914905-1628844927.jpg
小明想着,就回家了。
岑寂分析
说到这个拼写检查,小明其实是知道的。
自己没吃过猪肉,还是见过猪跑的。
平时看过一些公众号大佬分享,说是公众号推出了拼写检查功能,以后再也不会有错别字了。
厥后,小明还是在他们的文章中看到了不少错别字。厥后,就没有厥后了。
为什么不去问一问万能的 github 呢?
小明打开了 github 发现好像没有成熟的 java 相关的开源项目,有的几颗星,用起来不太放心。
估计 NLP 是搞 python 的比较多吧,java 实现中英文拼写检查和错误纠正?可我只会写 CRUD 啊!
小明默默地点起了一根华子……
窗外的夜色如水,不禁陷入了沉思,我来自何方?去往何处?人生的意义又是什么?
https://img2024.cnblogs.com/other/1436333/202412/1436333-20241208152915128-1609344423.jpg
尚有余热的烟灰落在了小明某东买的拖鞋上,把他脑海中脱缰的野马烫的一机灵。
没有任何思路,没有任何头绪,还是先洗洗睡吧。
那一夜,小明做了一个长长的好梦。梦里没有任何的错别字,所有的字句都坐落在正确的位置上……
转机
第二天,小明打开了搜索框,输入 spelling correct。
可喜的是,找到了一篇英文拼写纠正算法解说。
吾尝终日而思矣,不如须臾之所学也。小明叹了一句,就看了起来。
算法思路
英文单词紧张有 26 个英笔墨母组成,所以拼写的时间大概出现错误。
首先可以获取正确的英文单词,节选如下:
apple,16192
applecart,41
applecarts,1
appledrain,1
appledrains,1
applejack,571
applejacks,4
appleringie,1
appleringies,1
apples,5914
applesauce,378
applesauces,1
applet,2每一行用逗号分隔,后面是这个单词出现的频率。
以用户输入 appl 的为例,假如这个单词不存在,则可以对其举行 insert/delete/replace 等操作,找到最靠近的单词。(本质上就是找到编辑距离最小的单词)
假如输入的单词存在,则阐明正确,不消处置惩罚。
https://img2024.cnblogs.com/other/1436333/202412/1436333-20241208152915352-1032947193.jpg
词库的获取
那么英文词库去那里得到呢?
小明想了想,于是去各个地方查了一圈,最后找到了一个比较完善的英文单词频率词库,共计 27W+ 的单词。
节选如下:
aa,1831
aah,45774
aahed,1
aahing,30
aahs,23
...
zythums,1
zyzzyva,2
zyzzyvas,1
zzz,76
zzzs,2焦点代码
获取用户当前输入的所有大概情况,焦点代码如下:
/** * 构建出当前单词的所有大概错误情况 * * @param word 输入单词 * @return 返回效果 * @since 0.0.1 * @author 老马啸西风 */private List edits(String word) { List result = new LinkedList(); for (int i = 0; i < word.length(); ++i) { result.add(word.substring(0, i) + word.substring(i + 1)); } for (int i = 0; i < word.length() - 1; ++i) { result.add(word.substring(0, i) + word.substring(i + 1, i + 2) + word.substring(i, i + 1) + word.substring(i + 2)); } for (int i = 0; i < word.length(); ++i) { for (char c = 'a'; c
页:
[1]