`
xiejin2008
  • 浏览: 125439 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

    博客分类:
  • J2EE
阅读更多

Levenshtein distance最先是由俄国科学家Vladimir Levenshtein在1965年发明,用他的名字命名。不会拼读,可以叫它edit distance(编辑距离)。 

原理很简单,就是返回将第一个字符串转换(删除、插入、替换)成第二个字符串的编辑次数。次数越少,意味着字符串相似度越高 

    Levenshtein distance可以用来: 

Spell checking(拼写检查) 
Speech recognition(语句识别) 
DNA analysis(DNA分析) 
Plagiarism detection(抄袭检测) 
LD用m*n的矩阵存储距离值。算法大概过程: 

java 代码实现: 

/** 
* 编辑距离的两字符串相似度 

* @author jianpo.mo 
*/ 
public class SimilarityUtil { 

    private static int min(int one, int two, int three) { 
        int min = one; 
        if(two < min) { 
            min = two; 
        } 
        if(three < min) { 
            min = three; 
        } 
        return min; 
    } 
    
    public static int ld(String str1, String str2) { 
        int d[][];    //矩阵 
        int n = str1.length(); 
        int m = str2.length(); 
        int i;    //遍历str1的 
        int j;    //遍历str2的 
        char ch1;    //str1的 
        char ch2;    //str2的 
        int temp;    //记录相同字符,在某个矩阵位置值的增量,不是0就是1 
        if(n == 0) { 
            return m; 
        } 
        if(m == 0) { 
            return n; 
        } 
        d = new int[n+1][m+1]; 
        for(i=0; i<=n; i++) {    //初始化第一列 
            d[i][0] = i; 
        } 
        for(j=0; j<=m; j++) {    //初始化第一行 
            d[0][j] = j; 
        } 
        for(i=1; i<=n; i++) {    //遍历str1 
            ch1 = str1.charAt(i-1); 
            //去匹配str2 
            for(j=1; j<=m; j++) { 
                ch2 = str2.charAt(j-1); 
                if(ch1 == ch2) { 
                    temp = 0; 
                } else { 
                    temp = 1; 
                } 
                //左边+1,上边+1, 左上角+temp取最小 
                d[i][j] = min(d[i-1][j]+1, d[i][j-1]+1, d[i-1][j-1]+temp); 
            } 
        } 
        return d[n][m]; 
    } 
    
    public static double sim(String str1, String str2) { 
        int ld = ld(str1, str2); 
        return 1 - (double) ld / Math.max(str1.length(), str2.length()); 
    } 
    
    public static void main(String[] args) { 
       
        String str1 = "chenlb.blogjava.net"; 
        String str2 = "chenlb.javaeye.com"; 
        System.out.println("ld="+ld(str1, str2)); 
        System.out.println("sim="+sim(str1, str2)); 
    } 
}

分享到:
评论

相关推荐

    字符串相似度算法 levenshtein distance 编辑距离算法

    **字符串相似度算法——...总的来说,编辑距离算法提供了一种量化比较字符串相似度的有效手段,是理解和处理文本数据的重要工具。在阅读提供的“ld.htm”文件后,可以更深入地了解这个算法的实现细节和实际应用案例。

    Python-Levenshtein快速计算编辑距离以及字符串的相似度

    在Python编程环境中,Levenshtein库是一个非常实用的工具,用于计算两个字符串之间的编辑距离。编辑距离,也称为Levenshtein距离,是衡量两个字符串差异的一种度量,定义为由一个字符串转换成另一个字符串最少的单...

    两个字符串的相似度算法实现——编辑距离之Levenshtein距离

    两个字符串的相似度算法实现——编辑距离之Levenshtein距离

    C#,字符串相似度的莱文斯坦距离(Levenshtein Distance)算法与源代码

    C#,字符串相似度的莱文斯坦距离(Levenshtein Distance)算法与源代码 莱文斯坦距离(Levenshtein Distance)用于衡量两个字符串之间的相似度。 莱文斯坦距离以俄国科学家(Vladimir I. Levenshtein)命名,他于...

    LD的两字符串相似度计算.zip

    Levenshtein Distance(简称LD),又称编辑距离,是衡量两个字符串相似度的一种方法。这个概念由俄国科学家Vladimir Levenshtein在1965年提出,因此得名。 编辑距离定义了将一个字符串转换成另一个字符串所需的最少...

    字符串相似度算法

    1. **Levenshtein距离**:由俄国科学家Levenshtein提出,它定义了两个字符串之间的最小编辑距离,即最少需要多少次插入、删除或替换操作才能将一个字符串转换为另一个。这种算法适用于拼写纠错和查找近似匹配。 2. ...

    Delphi计算字符串的相似度

    1. **Levenshtein距离**:也称为编辑距离,它计算的是从一个字符串转换为另一个字符串所需的最少单字符编辑(插入、删除或替换)次数。在Delphi中,你可以实现一个动态规划的算法来计算Levenshtein距离。 2. **...

    mysql 计算字符串相似度

    1. **使用更高效的算法**:例如,采用编辑距离算法(Levenshtein 距离)或 Jaccard 相似度等更复杂的相似度计算方法。 2. **利用 MySQL 的内置函数**:例如,尝试使用 `UNHEX()` 和 `HEX()` 函数来处理多字节字符。 ...

    计算字符串相似度(支持中英文,编辑距离算法,余弦,繁体转简体)

    本项目提供了一个简单易用的demo,支持中英文字符串的相似度比较,采用了编辑距离算法和余弦相似度这两种经典方法,并且包含了繁体字到简体字的转换功能。 首先,我们来探讨编辑距离算法。编辑距离(Levenshtein ...

    使用最短编辑距离算法判断两个字符串的相似度

    总之,最短编辑距离算法是计算字符串相似度的一种基础且重要的方法,它在文本处理领域有着广泛的应用。理解和掌握这一算法,对于开发相关的软件功能,如自动纠错、搜索引擎优化等,都是非常有益的。

    Java字符串相似度:各种字符串相似度和距离算法的实现:Levenshtein,Jaro-winkler,n-Gram,Q-Gram,Jaccard索引,最长公共子序列编辑距离,余弦相似度..

    “成本”列给出了计算成本的估算值,以分别计算长度为m和n的两个字符串之间的相似度。 归一化? 公制? 类型 成本 典型用法 距离 没有 是 O(米* n) 1 距离相似 是 没有 O(米* n) 1 距离 没有 没有 O(米* n...

    字符串的相似度 编辑距离 java实现

    `main` 方法用于测试编辑距离算法,而 `getwordistance` 方法则是计算两个字符串之间的编辑距离。该方法首先将两个字符串转换为字符数组,然后使用动态规划算法计算编辑距离。 动态规划算法的思路是从左上到右下...

    c#字符串相似度源码 编辑距离 余弦相似性 SimHash

    本文将详细解析C#编程语言中实现的四种字符串相似度计算方法:编辑距离(Levenshtein Distance)、余弦相似性(Cosine Similarity)以及SimHash算法。 首先,编辑距离是一种衡量两个字符串之间差异的度量,它表示由...

    字符串相似度比较

    本文将深入探讨字符串相似度比较的概念、常用算法以及在JavaScript中的实现,同时关注潜在的性能和内存管理问题。 字符串相似度比较旨在量化两个或多个字符串之间的相似程度,通常以百分比形式表示。这种比较不仅...

    Java错误堆栈相似度计算.pdf

    传统的字符串相似度比较算法,如最长公共子串算法(LCS)、Levenshtein Distance(编辑距离)和汉明距离(Hamming Distance),不能很好地衡量Java错误堆栈之间的相似度。Java错误堆栈具有其自身的特点,需要一种...

    数据挖掘与数据分析应用案例 数据挖掘算法实践基于Java的文本相似度(Levenshtein distance算法)计算.doc

    Levenshtein Distance算法,也称为编辑距离算法,由俄罗斯科学家Vladimir Levenshtein于1965年提出。这种算法的核心思想在于计算两个字符串之间的最小编辑距离,即通过最少的编辑操作(包括替换、插入、删除字符)将...

    字符串相似度比较T-2021-7-1.rar

    1. **编辑距离(Levenshtein Distance)**:编辑距离是指将一个字符串转换成另一个字符串所需的最少单字符编辑(插入、删除或替换)次数。这个概念在拼写检查和DNA序列比对等领域非常有用。 2. **Jaccard相似度**:...

    最小编辑距离(字符串相似度)java版

    总之,最小编辑距离算法是计算字符串相似度的一种有效方法,通过动态规划实现,具有较高的效率和广泛的应用价值。在Java编程中,`EditDistance.java`文件所包含的实现可以帮助开发者在各种需要字符串比较的场景下...

    LevenshteinDistance(编辑距离)算法详解[借鉴].pdf

    Levenshtein Distance 算法是一种计算两个字符串之间的编辑距离的算法,编辑距离是指从一个字符串变换到另一个字符串所需要的最少变化操作步骤。该算法的计算过程可以用一个二维表来理解,以beauty 和 batyu为例: ...

Global site tag (gtag.js) - Google Analytics