基于编辑距离算相似

  Levenshtein 距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数。

许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。

编辑距离的算法是首先由俄国科学家Levenshtein提出的,故又叫Levenshtein Distance。

import java.io.*;
import java.lang.Math;

class test  
{
    public static int min(int a1,int a2,int a3)
    {
        int min_value =0;
        min_value =(a1<a2?a1:a2)<a3?(a1<a2?a1:a2):a3;
        return min_value;
    }
    
    public static void levenshtein(String str1, String str2) {
        // 计算两个字符串的长度。
        int len1 = str1.length();
        int len2 = str2.length();
        // 建立上面说的数组,比字符长度大一个空间
        int[][] dif = new int[len1 + 1][len2 + 1];
        // 赋初值,步骤B。
        for (int a = 0; a <= len1; a++) {
            dif[a][0] = a;
        }
        for (int a = 0; a <= len2; a++) {
            dif[0][a] = a;
        }
        // 计算两个字符是否一样,计算左上的值
        int temp;
        for (int i = 1; i <= len1; i++) {
            for (int j = 1; j <= len2; j++) {

                System.out.println("i = " + i + " j = " + j + " str1 = "
                        + str1.charAt(i - 1) + " str2 = " + str2.charAt(j - 1));
                if (str1.charAt(i - 1) == str2.charAt(j - 1)) {
                    temp = 0;
                } else {
                    temp = 1;
                }
                // 取三个值中最小的
                dif[i][j] = min(dif[i - 1][j - 1] + temp, dif[i][j - 1] + 1,dif[i - 1][j] + 1);

                System.out.println("i = " + i + ", j = " + j + ", dif[i][j] = "
                        + dif[i][j]);
            }
        }
        System.out.println("字符串"" + str1 + ""与"" + str2 + ""的比较");
        // 取数组右下角的值,同样不同位置代表不同字符串的比较
        System.out.println("差异步骤:" + dif[len1][len2]);
        // 计算相似度
        float similarity = 1 - (float) dif[len1][len2]
                / Math.max(str1.length(), str2.length());
        System.out.println("相似度:" + similarity);
    }
    
    
    public static void main (String[] args) throws java.lang.Exception
    {
        System.out.println("hi");
        levenshtein("身高","身高");
    }
}

可得算出来的相似度是1.  代码是放在http://www.dooccn.com/java/这个在线java运行网站运行的。没有bug了。

原文地址:https://www.cnblogs.com/www-caiyin-com/p/8623051.html