let src = 'sitting'||'周一是今天吗'
let des = 'kitten'||'周一是今天'
/**
* 文本相似度匹配
* Levenshtein distance算法
*/
function getSimilarityDegree(src,des){
let m = src.length;
let n = des.length;
var matrix = [];
//初始化数组
for(let i=0;i<=m;i++){
matrix[i] = [];
if(!i){
for(let j=0;j<=n;j++){
matrix[0][j] = j;
}
}else matrix[i][0] = i;
}
/**
* array min
* @return {[type]} [array's min value]
*/
Array.prototype.min = function() {
return Math.min.apply({},this)
}
//计算两个字符是否一样,计算左上的值
let temp;
for (let i = 1; i <= m; i++) {
for (let j = 1; j <= n; j++) {
temp = src[i-1]==des[j-1]?0:1;
//取三个值中最小的
matrix[i][j] = [matrix[i-1][j-1]+temp, matrix[i][j-1]+1, matrix[i-1][j]+1].min();
}
}
return (1 - matrix[m][n]/Math.max(m,n)).toFixed(4);
}
// for test
console.log(getSimilarityDegree(src,des));