Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从JavaScript中的列表中检查单词的相似性(而不必遍历整个字典)?_Javascript_Regex_Dictionary - Fatal编程技术网

如何从JavaScript中的列表中检查单词的相似性(而不必遍历整个字典)?

如何从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

我想写一个拼写检查脚本。假设我有一个包含10个英语单词的键控列表:

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我还没有读完,但这是我一直在寻找的东西,谢谢