如何从JavaScript中的列表中检查单词相似性(不通过整个字典循环)?

时间:2014-10-31 06:31:12

标签: javascript regex dictionary

我正在尝试编写一个拼写检查脚本。假设我有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项)。我认为必须有一种方法可以更有效地定位单词的可能匹配,而不是使用键控列表循环整个数组。

我想不出怎么去做这件事。看起来它不应该那么难,但我在如何完成它上面的空白。也许涉及正则表达式的东西?

1 个答案:

答案 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是关于这个问题的。