如何从JavaScript中的列表中检查单词的相似性(而不必遍历整个字典)?
我想写一个拼写检查脚本。假设我有一个包含10个英语单词的键控列表:如何从JavaScript中的列表中检查单词的相似性(而不必遍历整个字典)?,javascript,regex,dictionary,Javascript,Regex,Dictionary,我想写一个拼写检查脚本。假设我有一个包含10个英语单词的键控列表: var wordList = { "moas" : "moas", "moat" : "moat", "moated" : "moated", "moating" : "moating", "moatlike" : "moatlike", "moats" : "moats", "mob" : "mob", "mobbed" : "mobbed", "mobb
var wordList = {
"moas" : "moas",
"moat" : "moat",
"moated" : "moated",
"moating" : "moating",
"moatlike" : "moatlike",
"moats" : "moats",
"mob" : "mob",
"mobbed" : "mobbed",
"mobber" : "mobber",
"mobbers" : "mobbers",
}
还有一个拼写错误的单词:“motelike”,我想从单词列表中找出最相似的单词来纠正它。如果最近的单词的相似度高于某个阈值,我将替换它
我可以把一些东西放在一起,循环遍历所有的单词并检查每个字母是否匹配,但如果我的字典>200000个条目,那么处理这些单词的成本会非常高)。我认为一定有一种方法可以更有效地定位单词的可能匹配项,而不是利用键控列表的优势循环整个数组
我想不出该怎么做。看起来应该没那么难,但我对如何完成这件事一无所知。可能与regex有关?您要查找的关键字是模糊字符串搜索。例如,有许多用于此的库。您可以这样使用它:
f = FuzzySet(['moas', 'moat', 'moated', 'moating', 'moatlike', 'moats', 'mob', 'mobbed', 'mobber', 'mobbers']);
f.get('moateb');
// returns [[0.8333333333333334, 'moated']]
// (array of pairs [score, match])
当然,您可以自己实现它,而不是使用库。是关于这个问题的。我觉得一定有什么聪明的方法可以做到这一点。。我花了二十分钟思考这项任务,希望自己能够完成这项任务,但没有成功。我想有时候你只需要寻求帮助:你可以试着按照每个单词的起始字母来调整你的字典,尽管这不允许第一个字母出现错误。不要为每一个拼写错误都编一本字典,而是使用equation@Bojangles我还没有读完,但这是我一直在寻找的东西,谢谢