转载文章地址:
http://wdhdmx.iteye.com/blog/1343856
1.百度百科介绍:
Levenshtein 距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数。
许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。
编辑距离的算法是首先由俄国科学家Levenshtein提出的,故又叫Levenshtein Distance。
2.用途
模糊查询
package com.leve;
/**
* @className:MyLevenshtein.java
* @classDescription:Levenshtein Distance 算法实现
* 可以使用的地方:DNA分析 拼字检查 语音辨识 抄袭侦测
* @author:donghai.wan
* @createTime:2012-1-12
*/
public class MyLevenshtein {
public static void main(String[] args) {
//要比较的两个字符串
String str1 = "四川成都市二环东路122号";
String str2 = "四川成都市二环东路142号";
levenshtein(str1,str2);
}
/**
* DNA分析 拼字检查 语音辨识 抄袭侦测
*
* @createTime 2012-1-12
*/
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++) {
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("字符串\""+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);
}
//得到最小值
private static int min(int... is) {
int min = Integer.MAX_VALUE;
for (int i : is) {
if (min > i) {
min = i;
}
}
return min;
}
}
分享到:
相关推荐
go语言实现的Levenshtein Distance 算法
在IT领域,字符串相似度...总之,编辑距离算法(Levenshtein Distance)是字符串处理中的一个重要工具,它提供了一种量化字符串相似性的方法。理解并熟练运用这个算法能够帮助我们在处理文本数据时做出更准确的决策。
在上述代码中,`LevenshteinDistance`函数接受两个字符串作为参数,并返回它们之间的Levenshtein距离。初始化二维数组`dp`用于存储中间结果,`min`函数用于找到三个整数中的最小值。 从压缩包文件"levenshtein-...
public class LevenshteinDistance { public static int calculate(String s1, String s2) { int[][] distance = new int[s1.length() + 1][s2.length() + 1]; for (int i = 0; i (); i++) distance[i][0] = i;...
C#,字符串相似度的莱文斯坦距离(Levenshtein Distance)算法与源代码 莱文斯坦距离(Levenshtein Distance)用于衡量两个字符串之间的相似度。 莱文斯坦距离以俄国科学家(Vladimir I. Levenshtein)命名,他于...
Levenshtein Distance算法的实现可以使用动态规划的方法,下面是Java、C++和Python三种语言的实现代码: (_java代码_) (_C++代码_) (_Python代码_) Levenshtein Distance算法的步骤: 1. 设置n为s的长度,...
Levenshtein Distance 算法详解 Levenshtein Distance 算法是一种计算两个字符串之间的编辑距离的算法,编辑距离是指从一个字符串变换到另一个字符串所需要的最少变化操作步骤。该算法的计算过程可以用一个二维表来...
在处理大文本数据时,为了优化性能,Levenshtein库通常采用动态规划的算法实现,它的时间复杂度是O(n*m),其中n和m分别是两个字符串的长度。虽然不是线性的,但对较短的字符串,这种算法仍然是高效的。 在`python-...
Levenshtein Distance--求字符串的相似程度的算法,文件用IE6可以打开。
两个字符串的相似度算法实现——编辑距离之Levenshtein距离
通过阅读和理解这些源代码,我们可以学习到如何使用C++和Cython进行高效的算法实现,并了解如何将Python与C/C++代码集成。这对于想要提升软件性能,尤其是处理大量字符串比较的开发者来说,是非常有价值的实践。同时...
public class LevenshteinDistance { public static int Calculate(string s, string t) { int n = s.Length; int m = t.Length; int[,] d = new int[n + 1, m + 1]; for (int i = 0; i ; i++) d[i, 0] = i;...
在编程领域,Levenshtein 算法是一种广泛应用的字符串相似度计算方法,它能够量化两个字符串之间的差异,即需要最少的单字符编辑(插入、删除或替换)次数,将一个字符串转换成另一个字符串。在 Rust 语言中,我们...
在本文中,我们将深入探讨如何在Angular应用中利用Levenshtein距离算法来实现智能路由,从而提供正确的路径建议。这个示例项目“ngx-smart-routing-demo”是针对Angular Router的一个增强,它能够帮助用户在输入错误...
在实际使用中,开发者可以通过npm(Node Package Manager)安装这个库,然后在项目中导入并调用其提供的函数,如`levenshteinDistance(str1, str2)`,来计算两个字符串的Levenshtein距离。 总结来说,这个“前端...
本资源提供的“LD算法的matlab实现”是针对LDA的一种具体编程实践,有助于理解其工作原理并应用于实际问题。 在MATLAB中实现LDA,首先需要理解几个关键概念。LDA的核心在于构建一个投影矩阵,该矩阵可以将原始数据...
在这个名为"LevenshteinDistance"的项目中,我们有一个简单的Java实现来计算两个字符串之间的Levenshtein距离。该项目可能包含以下关键组件: 1. **算法实现**:Java代码会实现一个二维动态规划矩阵,用于存储两个...
"Metaphone Spell Check" 是一个利用 Levenshtein Distance 和 Metaphone 算法组合实现的拼写检查程序,主要用于改进和扩展传统的拼写纠正功能。下面我们将深入探讨这两个算法以及它们如何协同工作。 1. **...
在这个开源项目——ferhatelmas/levenshtein中,作者用Golang实现了Levenshtein距离算法,为开发者提供了高效且灵活的字符串相似度计算工具。 首先,我们来详细了解Levenshtein距离的计算原理。假设我们有两个字符...