Quick actions

cmd+k|ctrl+k

Navigation

Languages

相似度Levenshtein

Snippet info

Language

Java

Visibility

public

Author

pheker

Created

2017-07-31T08:46:58Z

Updated

2017-07-31T09:58:44Z

class Main {
    public static void main(String[] args) {
        String src = "周一是今天吗";
        String des = "周一是今天";

        float sd = LevenshteinDistance.getInstance().getSimilarityDegree(src,des);
        System.out.println(sd);
    }
}


/**
 * 文本相似度匹配
 * Levenshtein distance算法
 */
class LevenshteinDistance{
    private static LevenshteinDistance _instance = null;
    public static LevenshteinDistance getInstance(){
        if (_instance == null){
            return new LevenshteinDistance();
        }
        return _instance;
    }
  
    public int LowerOfThree(int first, int second, int third){
        int min = first;
        if (second < min)
            min = second;
        if (third < min)
            min = third;
        return min;
    }
    
    
    /**
     * 文本相似度匹配
     * Levenshtein distance算法
     */
    public float getSimilarityDegree(String str1, String str2){
        
        int val = 0;
        if(str1==null||str2==null){
            return 0.0f;
        }
        int n = str1.length();
        int m = str2.length();


        if (n == 0){
            val = m;
        }else if (m == 0){
            val = n;
        }else{
            int[][] Matrix = new int[n + 1][ m + 1];

            for (int i = 0; i <= n; i++){
                Matrix[i][0] = i;
            }
    
            for (int j = 0; j <= m; j++){
                Matrix[0][j] = j;
            }
    
            int temp = 0;  
            for (int i = 1; i <= n; i++){
                for (int j = 1; j <= m; j++){
                    temp = str1.charAt(i-1) ==str2.charAt(j-1)?0:1;
                    Matrix[i][j] = LowerOfThree(Matrix[i-1][j] + 1, Matrix[i][j-1] + 1, Matrix[i-1][j-1] + temp);
                }
            }
            val = Matrix[n][m];
        }
        int maxLen = n>m?n:m;
        return 1 - (float)val/maxLen;
    }

}
INFO