我正在尝试编写一个拼写检查脚本。假设我有10个英文单词的键控列表:
var wordList = {
"moas" : "moas",
"moat" : "moat",
"moated" : "moated",
"moating" : "moating",
"moatlike" : "moatlike",
"moats" : "moats",
"mob" : "mob",
"mobbed" : "mobbed",
"mobber" : "mobber",
"mobbers" : "mobbers",
}
和一个拼写错误的单词:“motelike”,我想通过查找最相似的单词从单词列表中进行纠正。如果最接近的单词具有高于某个阈值的相似度,我将替换它。
我可以把一些东西放在一起,循环遍历所有的单词,并检查每个字母的匹配,但是当我的字典是>时,这将是非常昂贵的处理。 200,000项)。我认为必须有一种方法可以更有效地定位单词的可能匹配,而不是使用键控列表循环整个数组。
我想不出怎么去做这件事。看起来它不应该那么难,但我在如何完成它上面的空白。也许涉及正则表达式的东西?
答案 0 :(得分:1)
您正在寻找的关键字是模糊字符串搜索。有许多库,例如fuzzyset.js。你这样使用它:
f = FuzzySet(['moas', 'moat', 'moated', 'moating', 'moatlike', 'moats', 'mob', 'mobbed', 'mobber', 'mobbers']);
f.get('moateb');
// returns [[0.8333333333333334, 'moated']]
// (array of pairs [score, match])
当然,您可以自己实现它而不是使用库。 This wikipedia article是关于这个问题的。