我目前在使用模糊字符串匹配器时遇到了问题。我希望能够在不到一秒的时间内快速确定10,000个短语列表中的哪些短语与字典中200,000个短语中的任何一个的编辑距离为2或更小,使用Javascript。短语平均每个约15个字符。我不关心有多少场比赛,甚至比赛是什么,只是有没有比赛。我可以在我想要的字典中进行任何索引,但在其他单词上没有。
我的主要方法是使用BK树。对所有10,000个单词进行分类通常需要大约130-140秒,因此比我希望的低两个数量级。能够在Javascript中快速对短语进行分类是否现实?如果是这样,我应该使用什么技术,是否有比BK树更快的方法用于这样的问题?
答案 0 :(得分:1)
我会建议我的Levenshtein实施,因为它是我见过的最快的。
var levenshtein = (function() {
var row2 = [];
return function(s1, s2) {
if (s1 === s2) {
return 0;
} else {
var s1_len = s1.length, s2_len = s2.length;
if (s1_len && s2_len) {
var i1 = 0, i2 = 0, a, b, c, c2, row = row2;
while (i1 < s1_len)
row[i1] = ++i1;
while (i2 < s2_len) {
c2 = s2.charCodeAt(i2);
a = i2;
++i2;
b = i2;
for (i1 = 0; i1 < s1_len; ++i1) {
c = a + (s1.charCodeAt(i1) === c2 ? 0 : 1);
a = row[i1];
b = b < a ? (b < c ? b + 1 : c) : (a < c ? a + 1 : c);
row[i1] = b;
}
}
return b;
} else {
return s1_len + s2_len;
}
}
};
})();