function levenshtein(a, b) {
var i,j,cost,d=[];
if (a.length == 0) {return b.length;}
if (b.length == 0) {return a.length;}
for ( i = 0; i <= a.length; i++) {
d[i] = new Array();
d[ i ][0] = i;
}
for ( j = 0; j <= b.length; j++) {
d[ 0 ][j] = j;
}
for ( i = 1; i <= a.length; i++) {
for ( j = 1; j <= b.length; j++) {
if (a.charAt(i - 1) == b.charAt(j - 1)) {
cost = 0;
} else {
cost = 1;
}
d[ i ][j] = Math.min(d[ i - 1 ][j] + 1, d[ i ][j - 1] + 1, d[ i - 1 ][j - 1] + cost);
if (i > 1 && j > 1 && a.charAt(i - 1) == b.charAt(j - 2) && a.charAt(i - 2) == b.charAt(j - 1)) {
d[i][j] = Math.min(d[i][j], d[i - 2][j - 2] + cost)
}
}
}
return d[ a.length ][b.length];
}
function suggests(suggWord) {
var sArray = [];
for(var z = words.length;--z;) {
if(levenshtein(words[z],suggWord) < 2) {
sArray.push(words[z]);
}
}
}
こんにちは。
私は上記のダメラウ・レーベンシュタインアルゴリズムの実装を使用しています。通常のPCブラウザでは十分に高速ですが、タブレットでは約2/3秒かかります。
基本的に、suggest関数に送信された単語を辞書内のすべての単語と比較し、距離が2未満の場合は、それを配列に追加します。
dicは、約600,000(699KB)の単語の配列です。これの目的は、Javascriptスペルチェッカーの単語候補機能を作成することです。
これをスピードアップする方法について何か提案はありますか?またはこれを行う別の方法ですか?