计算两组标签相似度算法——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;
    }

原文地址:https://www.cnblogs.com/qilin20/p/12324382.html

时间: 2024-12-16 05:05:58

计算两组标签相似度算法——levenshtein distance 编辑距离算法的相关文章

Levenshtein distance 编辑距离算法

这几天再看 virtrual-dom,关于两个列表的对比,讲到了 Levenshtein distance 距离,周末抽空做一下总结. Levenshtein Distance 介绍 在信息理论和计算机科学中,Levenshtein 距离是用于测量两个序列之间的差异量(即编辑距离)的度量.两个字符串之间的 Levenshtein 距离定义为将一个字符串转换为另一个字符串所需的最小编辑数,允许的编辑操作是单个字符的插入,删除或替换. 例子 ‘kitten’和’sitten’之间的 Levensht

Levenshtein Distance (编辑距离) 算法详解

编辑距离即从一个字符串变换到另一个字符串所需要的最少变化操作步骤(以字符为单位,如son到sun,s不用变,将o->s,n不用变,故操作步骤为1). 为了得到编辑距离,我们画一张二维表来理解,以beauty和batyu为例: 图示如1单元格位置即是两个单词的第一个字符[b]比较得到的值,其值由它上方的值(1).它左方的值(1)和.它左上角的值(0)来决定.当单元格所在的行和列所对应的字符(如3对应的是a和b)相等时,它左上角的值+0,否则加1(如在1处,[b]=[b]故左上角的值加0即0+0=0

计算两组经纬度座标间的距离

1 /** 2 * 计算两组经纬度座标间的距离 3 * params:lat1纬度1,lng1经度1,lat2纬度2,lng2经度2,len_type(1:m|2:km); 4 * Echo GetDistance($lat1,$lng1,$lat2,$lng2).'米'; 5 */ 6 function GetDistance($lat1,$lng1,$lat2,$lng2,$len_type=1,$decimal=2){ 7 $EARTH_RADIUS=6378.137; //地球半径,假设

字符串相似度算法(编辑距离算法 Levenshtein Distance)(转)

在搞验证码识别的时候需要比较字符代码的相似度用到“编辑距离算法”,关于原理和C#实现做个记录. 据百度百科介绍: 编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数,如果它们的距离越大,说明它们越是不同.许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符. 例如将kitten一字转成sitting: sitten (k→s) sittin (e→i) sitting (→g) 俄罗斯科学家V

字符串相似度算法——Levenshtein Distance算法

Levenshtein Distance 算法,又叫 Edit Distance 算法,是指两个字符串之间,由一个转成另一个所需的最少编辑操作次数.许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符.一般来说,编辑距离越小,两个串的相似度越大. 算法实现原理图解: a.首先是有两个字符串,这里写一个简单的 abc 和 abe b.将字符串想象成下面的结构. A 处 是一个标记,为了方便讲解,不是这个表的内容.   abc a b c abe 0 1 2 3 a 1 A处  

什么是TD-IDF?(计算两篇文章相似度)

什么是TD-IDF? 计算特征向量(或者说计算词条的权重) 构造文档模型 我们这里使用空间向量模型来数据化文档内容:向量空间模型中将文档表达为一个矢量. We use the spatial vector model to digitize the document content: the vector space model represents the document as a vector. 用特征向量(T1,W1:T2,W2:T3, W3:…:Tn,Wn)表示文档. The eige

关于计算两日期之间经过多少天的超巧妙算法

首先声明:本文引自一博主原创博客 原创地址:https://blog.csdn.net/chinaeran/article/details/43601699 昨天呢,刚刚阅读了这个代码,大部分都还可以看懂,有一两个地方属实难懂,但细细思来,方知博主此代码超神奇.简直巧妙至极. 所以来细细解析一下此代码. 话不多说.我们先来看一下原文. #include <stdio.h>#include <stdlib.h> int day_diff(int year_start, int mon

计算两个集合的差集——第六期 Power8 算法挑战赛

第六期Power8大赛 1.1 比赛题目 题目: 计算两个集合的差集: 详细说明: 分别有集合A和B两个大数集合,求解集合A与B的差集(A中有,但B中无的元素),并将结果保存在集合C中,要求集合C中的元素升序. 输入为两个文件,分别为A.txt,B.txt,一行一个值,并且是无序的.结果输出到C.txt,即输入文件的差集,一行一个值,并且要求结果升序排列. 考量点: (1) 大数集合求差集: (2) 大数据集合排序: 题目实例: 例如,若集合A={5,20,10,15,25,30},集合B={1

(每日算法)Leetcode--Edit Distance(编辑距离)

简单地说,就是仅通过插入(insert).删除(delete)和替换(substitute)个操作将一个字符串s1变换到另一个字符串s2的最少步骤数.熟悉算法的同学很容易知道这是个动态规划问题. 其实一个替换操作可以相当于一个delete+一个insert,所以我们将权值定义如下: I  (insert):1 D (delete):1 S (substitute):1 示例: intention->execution Minimal edit distance: delete i ; n->e