一尘不染

哪种算法在拼写检查器中提供建议?

algorithm

实现带有单词建议的拼写检查器时,通常使用哪种算法?

最初,我认为检查每个键入的新单词(如果在词典中找不到)相对于其与词典中其他每个单词的Levenshtein距离,并返回最佳结果可能是有意义的。但是,这似乎效率很低,必须反复评估整个字典。

通常如何完成?


阅读 193

收藏
2020-07-28

共1个答案

一尘不染

彼得·诺维格(Peter Norvig)一篇很好的文章,介绍如何实现拼写校正器。从根本上讲,这是一种蛮力尝试具有给定编辑距离的候选字符串。(以下是一些技巧,您可以使用布隆过滤器更快的候选哈希来提高拼写校正器的性能。)

拼写检查器的要求较弱。您只需找出字典中没有单词。您可以使用布隆过滤器来构建拼写检查器,从而减少内存消耗。乔恩·本特利(Jon
Bentley)在《Programming Pearls》中描述了一个古老的版本,使用64kb的英语词典。

BK-树是一种替代方法。一篇不错的文章在这里

Levenshstein距离不是拼写检查器的正确编辑距离。它只知道插入,删除和替换。缺少换位,并为1个字符的换位生成2(即1个删除和1个插入)。Damerau–Levenshtein距离是正确的编辑距离。

2020-07-28