问题 有没有办法计算2个字符串之间的%匹配


有没有办法计算2个字符串之间的%匹配?

我有一种情况,如果有85%,需要计算2个字符串之间的匹配

匹配然后我将结合2个表,我已经编写了组合2个表的代码

我的示例字符串是:

var str1 = 'i love javascript';
var str2 = 'i love javascripttt';

var matchPer = match(str1,str2); // result might be 80% , 85%, 90% ,95% etc

6789
2018-01-10 05:02


起源

你计算百分比的逻辑是什么? - Robby Cornelissen
不只是 一个 方式,有 地段 方式。你有选择指南吗? “85%匹配”对您来说意味着什么? - hobbs
1 - levenshtein(str1, str2) / max(str1.length, str2.length) 对我来说似乎是一个合理的指标,但你可能想要Damerau-Levenshtein(它认为“bacon”和“baocn”之间的区别是1而不是2),或者像Ala Eddine JEBALI的答案那样的汉明距离,这是不可原谅的添加和删​​除(“香蕉”和“凤梨”的Levenshtein距离为1但汉明距离为6.它们是14%相似还是86%相似?) - hobbs
@hobbs请将其作为答案发布 - smci
更多相关信息: en.wikipedia.org/wiki/String_metric - JollyJoker


答案:


像这样的东西?

var str1 = 'i love javascript';
var str2 = 'i love javascripttt';

function match(str1, str2){
    var tmpValue = 0;
    var minLength = str1.length;
	if(str1.length > str2.length){
		var minLength = str2.length;
	}	
    var maxLength = str1.length;
	if(str1.length < str2.length){
		var maxLength = str2.length;
	}
    for(var i = 0; i < minLength; i++) {
        if(str1[i] == str2[i]) {
            tmpValue++;
        }
    }
    var weight = tmpValue / maxLength;
    return (weight * 100) + "%";
}

var matchPer = match(str1,str2);
console.log(matchPer); //outputs: 89.47%
console.log( match("aaaaa", "aaaaa") ); //outputs: 100%
console.log( match("aaaaa", "aXaaa") ); //outputs: 80%
console.log( match("aaaaa", "aXXaa") ); //outputs: 60%
console.log( match("aaaaa", "aXXXa") ); //outputs: 40%
console.log( match("aaaaa", "aXXXX") ); //outputs: 20%


10
2018-01-10 05:11



请exoplain这是什么;不要juist转储代码。 - Jan Doggen
这是 en.wikipedia.org/wiki/Simple_matching_coefficient - JollyJoker