zoukankan      html  css  js  c++  java
  • 基于编辑距离算相似

      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了。

  • 相关阅读:
    JAVA HDFS API Client 连接HA
    jdo pom
    iOS/OC 笛卡尔积算法 递归求笛卡尔积 求N个数组中元素任意组合
    Tableview如何实现流畅的展开折叠?
    iOS证书那些事儿
    iOS 状态栏颜色设置
    iOS 可以正常跳转WEB支付宝 无法跳转支付宝APP
    iOS代码管理工具的使用
    *** Assertion failure in -[UICollectionView _createPreparedSupplementaryViewForElementOfKind:atIndexPath:withLayoutAttributes:applyAttributes:]1555错误
    iOS UISearchBar 设置光标颜色和取消按钮颜色
  • 原文地址:https://www.cnblogs.com/www-caiyin-com/p/8623051.html
Copyright © 2011-2022 走看看