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));
}
}
- 浏览: 125439 次
- 性别:
- 来自: 北京
最新评论
-
xiejin2008:
最近1-2年比较流行的树组件 ztree
Dtree+Jquery动态生成树节点例子《新手可参考》 -
xiejin2008:
cyl5753 写道按照上面的步骤,访问https://127 ...
WebLogic Server 10.3 SSL配置及SSL协议传输的WebSevice调用 -
cyl5753:
按照上面的步骤,访问https://127.0.0.1:700 ...
WebLogic Server 10.3 SSL配置及SSL协议传输的WebSevice调用 -
wang1248912822:
[size=large][/size] [b] ...
Ext3.0 动态数据 Chart 初探 -
fushun_test:
很不错,柱状的每个珠子颜色和饼状的每个部分的颜色可以自定义吗 ...
Ext3.0 动态数据 Chart 初探
java 两字符串相似度计算算法 (转)Levenshtein Distance编辑距离算法
- 博客分类:
- J2EE
相关推荐
**字符串相似度算法——...总的来说,编辑距离算法提供了一种量化比较字符串相似度的有效手段,是理解和处理文本数据的重要工具。在阅读提供的“ld.htm”文件后,可以更深入地了解这个算法的实现细节和实际应用案例。
在Python编程环境中,Levenshtein库是一个非常实用的工具,用于计算两个字符串之间的编辑距离。编辑距离,也称为Levenshtein距离,是衡量两个字符串差异的一种度量,定义为由一个字符串转换成另一个字符串最少的单...
两个字符串的相似度算法实现——编辑距离之Levenshtein距离
C#,字符串相似度的莱文斯坦距离(Levenshtein Distance)算法与源代码 莱文斯坦距离(Levenshtein Distance)用于衡量两个字符串之间的相似度。 莱文斯坦距离以俄国科学家(Vladimir I. Levenshtein)命名,他于...
Levenshtein Distance(简称LD),又称编辑距离,是衡量两个字符串相似度的一种方法。这个概念由俄国科学家Vladimir Levenshtein在1965年提出,因此得名。 编辑距离定义了将一个字符串转换成另一个字符串所需的最少...
1. **Levenshtein距离**:由俄国科学家Levenshtein提出,它定义了两个字符串之间的最小编辑距离,即最少需要多少次插入、删除或替换操作才能将一个字符串转换为另一个。这种算法适用于拼写纠错和查找近似匹配。 2. ...
1. **Levenshtein距离**:也称为编辑距离,它计算的是从一个字符串转换为另一个字符串所需的最少单字符编辑(插入、删除或替换)次数。在Delphi中,你可以实现一个动态规划的算法来计算Levenshtein距离。 2. **...
1. **使用更高效的算法**:例如,采用编辑距离算法(Levenshtein 距离)或 Jaccard 相似度等更复杂的相似度计算方法。 2. **利用 MySQL 的内置函数**:例如,尝试使用 `UNHEX()` 和 `HEX()` 函数来处理多字节字符。 ...
本项目提供了一个简单易用的demo,支持中英文字符串的相似度比较,采用了编辑距离算法和余弦相似度这两种经典方法,并且包含了繁体字到简体字的转换功能。 首先,我们来探讨编辑距离算法。编辑距离(Levenshtein ...
总之,最短编辑距离算法是计算字符串相似度的一种基础且重要的方法,它在文本处理领域有着广泛的应用。理解和掌握这一算法,对于开发相关的软件功能,如自动纠错、搜索引擎优化等,都是非常有益的。
“成本”列给出了计算成本的估算值,以分别计算长度为m和n的两个字符串之间的相似度。 归一化? 公制? 类型 成本 典型用法 距离 没有 是 O(米* n) 1 距离相似 是 没有 O(米* n) 1 距离 没有 没有 O(米* n...
`main` 方法用于测试编辑距离算法,而 `getwordistance` 方法则是计算两个字符串之间的编辑距离。该方法首先将两个字符串转换为字符数组,然后使用动态规划算法计算编辑距离。 动态规划算法的思路是从左上到右下...
本文将详细解析C#编程语言中实现的四种字符串相似度计算方法:编辑距离(Levenshtein Distance)、余弦相似性(Cosine Similarity)以及SimHash算法。 首先,编辑距离是一种衡量两个字符串之间差异的度量,它表示由...
本文将深入探讨字符串相似度比较的概念、常用算法以及在JavaScript中的实现,同时关注潜在的性能和内存管理问题。 字符串相似度比较旨在量化两个或多个字符串之间的相似程度,通常以百分比形式表示。这种比较不仅...
传统的字符串相似度比较算法,如最长公共子串算法(LCS)、Levenshtein Distance(编辑距离)和汉明距离(Hamming Distance),不能很好地衡量Java错误堆栈之间的相似度。Java错误堆栈具有其自身的特点,需要一种...
Levenshtein Distance算法,也称为编辑距离算法,由俄罗斯科学家Vladimir Levenshtein于1965年提出。这种算法的核心思想在于计算两个字符串之间的最小编辑距离,即通过最少的编辑操作(包括替换、插入、删除字符)将...
1. **编辑距离(Levenshtein Distance)**:编辑距离是指将一个字符串转换成另一个字符串所需的最少单字符编辑(插入、删除或替换)次数。这个概念在拼写检查和DNA序列比对等领域非常有用。 2. **Jaccard相似度**:...
总之,最小编辑距离算法是计算字符串相似度的一种有效方法,通过动态规划实现,具有较高的效率和广泛的应用价值。在Java编程中,`EditDistance.java`文件所包含的实现可以帮助开发者在各种需要字符串比较的场景下...
Levenshtein Distance 算法是一种计算两个字符串之间的编辑距离的算法,编辑距离是指从一个字符串变换到另一个字符串所需要的最少变化操作步骤。该算法的计算过程可以用一个二维表来理解,以beauty 和 batyu为例: ...