あなたはedit distance(別名Levenshtein距離)を探しています。この方式の下では、二つの文字列間の距離は挿入、欠失、又は置換文字列が一致するのに必要な数です。正しい答えは「オレンジ」であれば、例えば、次のようになります。
- 「みかんは」0の距離を(彼らは同じ単語です)してい
- 「オレンジ」(
s
を削除)1の距離を持っています
- "rorangerが" 2(
r
を挿入し、s -> r
を置換)
- "スポンジ" の距離は ""
- (
o -> a
に置き換え、r -> p
に置き換え、o -> s
を置換)3の距離を有している(7までの距離を有していますインサイドtはoranges
内のすべての文字)
JavaScriptでそれのための単純なアルゴリズムは)this gistから適応及び変更(次のようになります。あなたの質問と
function(a, b){
// Return the number of characters in the other
// string if either string is blank.
if(a.length == 0) return b.length;
if(b.length == 0) return a.length;
// Otherwise, let's make a matrix to represent the possible choices
// we can take.
var matrix = [];
var i;
for(i = 0; i <= b.length; i++){
matrix[i] = [i];
}
var j;
for(j = 0; j <= a.length; j++){
matrix[0][j] = j;
}
for(i = 1; i <= b.length; i++){
for(j = 1; j <= a.length; j++){
if(b.charAt(i-1) == a.charAt(j-1)){
matrix[i][j] = matrix[i-1][j-1];
} else {
matrix[i][j] = Math.min(matrix[i-1][j-1] + 1, // substitution
Math.min(matrix[i][j-1] + 1, // insertion
matrix[i-1][j] + 1)); // deletion
}
}
}
return matrix[b.length][a.length];
};
一つの問題は、例あなたのことですあなたが探しているものについて書きました。 「90%一致」または「回答の正確さ」)は、明確な指標ではありません。
答えが間違っている可能性がある方法はたくさんあります。たとえば、正解が「りんご」であるとします。どれを受け入れるべきですか?
- "APPLE"(間違った総額)
- "ppple"(スペルミス)
- "りんご"(複数が、あなたは単数形を望んでいた)
- "ふじリンゴ"(あまりにも特定の)
- 「果物」(広すぎる)
などです。これらのうちどれを受け入れるべきかを決定することは、簡単な編集距離アルゴリズムの能力を超えており、NLPのように重い持ち上げが必要になります。
ありがとうございます!これは驚くほど効果的です!私は5分でそれを受け入れます。 –
これは音楽のみのクイズなので、大文字と小文字を区別しないようにするので、問題はそれほどありません。 –