相似度算法——Levenshtein(编辑距离)

1、概念

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

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

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

2、用途

相似度对比;比如用户输入了一段文字,我们要求用户修改内容和原内容的相似度必须小于某值才能进行保存,这就需要用到该算法

3、代码实现

public class Test {
    
    

    public static void main(String[] args) {
    
    
        //要比较的两个字符串
        String first = "刘亦菲,1987年8月25日出生于湖北省武汉市,华语影视女演员、歌手,毕业于北京电影学院2002级表演系本科。2002年,因出演电视剧《金粉世家》中白秀珠一角踏入演艺圈。2003年因主演武侠剧《天龙八部》崭露头角。2004年凭借仙侠剧《仙剑奇侠传》赵灵儿一角获得了高人气与关注度。2005年因在武侠剧《神雕侠侣》中饰演小龙女受到广泛关注。2006年发行首张国语专辑《刘亦菲》和日语专辑《All My Words》;同年,成为金鹰节历史上首位金鹰女神。2008年起转战大银幕,并凭借好莱坞电影《功夫之王》成为首位荣登IMDB电影新人排行榜榜首的亚洲女星。2009年在“80后新生代娱乐大明星”评选活动中获封“四小花旦”之一。2012年,获得第24届香港专业电影摄影师学会最具魅力女演员奖。2014年,凭借出演古装片《铜雀台》中";
        String second = "刘亦菲,1987年8月25日出生于湖北省武汉市,华语影视女演员、歌手,毕业于北京电影学院2002级表演系本科。2002年因出演电视剧《金粉世家》中白秀珠一角踏入演艺圈。2003年因出演武侠剧《天龙八部》中王语嫣一角崭露头角。2004年凭借仙侠剧《仙剑奇侠传》赵灵儿一角获得了高人气与关注度。2005年因在武侠剧《神雕侠侣》中饰演小龙女受到广泛关注。2006年发行首张国语专辑《刘亦菲》和日语专辑《All My Words》;同年成为金鹰节历史上首位金鹰女神。2008年起转战大银幕,并凭借好莱坞电影《功夫之王》成为首位荣登IMDB电影新人排行榜榜首的亚洲女星。2009年,获封“四小花旦”之一。2012年,获得第24届香港专业电影摄影师学会最具魅力女演员奖。2014年,凭借古装片《铜雀台》中灵雎一角获得第5届澳门国际电影节最佳女主角奖。2015年起,刘亦菲主演的电影《夜孔雀》《烽火芳菲》均入围国际";
        // 计算相似度
        levenshtein(second, first);
    }

    public static double levenshtein(String str1, String str2) {
    
    
        //计算两个字符串的长度。
        int len1 = str1.length();
        int len2 = str2.length();
        //建立上面说的数组,比字符长度大一个空间
        int[][] dif = new int[len1 + 1][len2 + 1];
        //赋初值。
        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++) {
    
    
                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("字符串\"" + 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);
        return similarity;
    }

    //得到最小值
    private static int min(int... is) {
    
    
        int min = Integer.MAX_VALUE;
        for (int i : is) {
    
    
            if (min > i) {
    
    
                min = i;
            }
        }
        return min;
    }
}

4、结果

字符串"刘亦菲,1987年8月25日出生于湖北省武汉市,华语影视女演员、歌手,毕业于北京电影学院2002级表演系本科。2002年因出演电视剧《金粉世家》中白秀珠一角踏入演艺圈。2003年因出演武侠剧《天龙八部》中王语嫣一角崭露头角。2004年凭借仙侠剧《仙剑奇侠传》赵灵儿一角获得了高人气与关注度。2005年因在武侠剧《神雕侠侣》中饰演小龙女受到广泛关注。2006年发行首张国语专辑《刘亦菲》和日语专辑《All My Words》;同年成为金鹰节历史上首位金鹰女神。2008年起转战大银幕,并凭借好莱坞电影《功夫之王》成为首位荣登IMDB电影新人排行榜榜首的亚洲女星。2009年,获封“四小花旦”之一。2012年,获得第24届香港专业电影摄影师学会最具魅力女演员奖。2014年,凭借古装片《铜雀台》中灵雎一角获得第5届澳门国际电影节最佳女主角奖。2015年起,刘亦菲主演的电影《夜孔雀》《烽火芳菲》均入围国际""刘亦菲,1987年8月25日出生于湖北省武汉市,华语影视女演员、歌手,毕业于北京电影学院2002级表演系本科。2002年,因出演电视剧《金粉世家》中白秀珠一角踏入演艺圈。2003年因主演武侠剧《天龙八部》崭露头角。2004年凭借仙侠剧《仙剑奇侠传》赵灵儿一角获得了高人气与关注度。2005年因在武侠剧《神雕侠侣》中饰演小龙女受到广泛关注。2006年发行首张国语专辑《刘亦菲》和日语专辑《All My Words》;同年,成为金鹰节历史上首位金鹰女神。2008年起转战大银幕,并凭借好莱坞电影《功夫之王》成为首位荣登IMDB电影新人排行榜榜首的亚洲女星。2009年在“80后新生代娱乐大明星”评选活动中获封“四小花旦”之一。2012年,获得第24届香港专业电影摄影师学会最具魅力女演员奖。2014年,凭借出演古装片《铜雀台》中"的比较
差异步骤:84
相似度:0.79

猜你喜欢

转载自blog.csdn.net/qq_42449963/article/details/129420039