我想進行測驗,用戶應輸入正確的答案。 假設答案與90%匹配,則答案是正確的。例如,如果用戶鍵入允許輸入錯誤
Britney Spers
而不是Britney Spears
,答案應該是正確的。
我搜索了Javascript函數來確定答案的準確程度,我發現了一些PHP,Ruby等有趣的函數,但我需要JavaScript。
有沒有人有這種算法的經驗? 謝謝,如果你回答:)
我想進行測驗,用戶應輸入正確的答案。 假設答案與90%匹配,則答案是正確的。例如,如果用戶鍵入允許輸入錯誤
Britney Spers
而不是Britney Spears
,答案應該是正確的。
我搜索了Javascript函數來確定答案的準確程度,我發現了一些PHP,Ruby等有趣的函數,但我需要JavaScript。
有沒有人有這種算法的經驗? 謝謝,如果你回答:)
您正在尋找的edit distance(aka Levenshtein距離)。在該方案下,所述距離兩者之間的字符串是插入,缺失,或取代使串匹配所需的數量。例如,如果正確的回答是「橘子」,則:
s
)r
,替換s -> r
)o -> s
,替換r -> p
,替換o -> a
)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%」或「答案的準確性」)不是明確定義的指標。
有很多答案可能是錯誤的方法。例如,讓我們說正確的答案是「蘋果」。哪些應該被接受?
等等。確定哪些應該被接受是超出了簡單的編輯距離算法的能力,並且需要更重的提升,如NLP。
你正在尋找一個編輯距離算法。基本上,你想看看從一個字符串到另一個字符串需要多少個字符變化(添加/刪除/替換)。當然,現在你必須有一個目標字符串的字典來找到距離。
http://en.wikipedia.org/wiki/Edit_distance
更具體地:http://en.wikipedia.org/wiki/Levenshtein_distance
Britney Spers
和Britney Spears
之間的編輯距離將是一個:插入'a'
。
謝謝!這工作出奇的好!我會在5分鐘內接受它。 – 2012-04-22 18:47:56
這是一個基於音樂的測驗,我會讓它不區分大小寫,所以應該不會有很多問題。 – 2012-04-22 18:55:27