zoukankan      html  css  js  c++  java
  • 计算两组标签相似度算法——levenshtein distance 编辑距离算法

      标签在数据分析中起到很重要的作用,给用户打标签,给商品打标签,给新闻打标签,好的标签可以为我们后期分析数据时提供很大的便利。有时我们需要计算两个对象之间标签的相似度。目前学习的算法是levenshtein distance 编辑距离算法。

      代码示例:

    //标签相似度
        public static double levenshtein(String s1, String s2) {
            
            System.out.println("levenshtein    str1:"+s1+"    str2:"+s2);
            DecimalFormat df=new DecimalFormat("0.00");//java保留两位小数s
            String[] str1 = s1.split("\|");
            String[] str2 = s2.split("\|");
            // 计算两个字符串的长度。
            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++) {
                    if (str1[i - 1] == str2[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("差异步骤:" + dif[len1][len2]);
            // 计算相似度
            double similarity = 1 - (double) dif[len1][len2] / Math.max(str1.length, str2.length);
    
            similarity = Double.parseDouble(df.format(similarity));
            
            return similarity;
        }
        
        private static int min(int a, int b, int c) {
            int min = a < b ? a : b;
            return min < c ? min : c;
        }
  • 相关阅读:
    numpy计算路线距离
    WebApi安全性 使用TOKEN+签名验证
    从SQL查询分析器中读取EXCEL中的内容
    Autofac应用总结
    Visual Studio提示“无法启动IIS Express Web服务器”的解决方法
    架构 : 三层架构、MVC、MVP、MVVM
    Asp.Net MVC :路由器
    myeclipse10安装egit和使用
    myeclipse10.7安装git插件
    SQLite之C#连接SQLite
  • 原文地址:https://www.cnblogs.com/qilin20/p/12324382.html
Copyright © 2011-2022 走看看