Quick actions

cmd+k|ctrl+k

Navigation

Languages

相似度Levenshtein

Snippet info

Language

JavaScript

Visibility

public

Author

pheker

Created

2017-07-31T06:32:41Z

Updated

2018-01-30T03:11:07Z



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));


INFO