参见网址http://www.merriampark.com/ld.htm#JAVA
import java.util.BitSet;
public class Distance {
public static void main(String[] args) {
Distance distance = new Distance() ;
int i = distance.LD("gttttl", "gambol") ;
System.out.println(i);
}
// ****************************
// Get minimum of three values
// ****************************
private int Minimum(int a, int b, int c) {
int mi;
mi = a;
if (b < mi) {
mi = b;
}
if (c < mi) {
mi = c;
}
return mi;
}
// *****************************
// Compute Levenshtein distance
// *****************************
public int LD(String s, String t) {
//构建一个二维数据
int d[][]; // matrix
//s的长度
int n; // length of s
//t的长度
int m; // length of t
//s的偏移量
int i; // iterates through s
//t的偏移量
int j; // iterates through t
//s偏移量所在的char
char s_i; // ith character of s
//t偏移量所在的char
char t_j; // jth character of t
//临时变量对比差值
int cost; // cost
// Step 1
n = s.length();
m = t.length();
//当n为0时.则变化为m所有的值
if (n == 0) {
return m;
}
//同上
if (m == 0) {
return n;
}
d = new int[n + 1][m + 1];
// Step 2 将数组首行首列添加内容.为当前行号列号
for (i = 0; i <= n; i++) {
d[i][0] = i;
}
for (j = 0; j <= m; j++) {
d[0][j] = j;
}
// Step 3
for (i = 1; i <= n; i++) {
s_i = s.charAt(i - 1);
// Step 4
//判断i位置的值和 t的每个字的差值
for (j = 1; j <= m; j++) {
t_j = t.charAt(j - 1);
// Step 5
if (s_i == t_j) {
cost = 0;
} else {
cost = 1;
}
// Step 6
//在数组的
d[i][j] = Minimum(d[i - 1][j] + 1, d[i][j - 1] + 1,
d[i - 1][j - 1] + cost);
}
}
// Step 7
//取得最右面最下面的值就是文本的想速度了
return d[n][m];
}
}
都加注释了....不解释了..
This section shows how the Levenshtein distance is computed when the source string is "GUMBO" and the target string is "GAMBOL".
Steps 1 and 2
G U M B O
0 1 2 3 4 5
G 1
A 2
M 3
B 4
O 5
L 6
Steps 3 to 6 When i = 1
G U M B O
0 1 2 3 4 5
G 1 0
A 2 1
M 3 2
B 4 3
O 5 4
L 6 5
Steps 3 to 6 When i = 2
G U M B O
0 1 2 3 4 5
G 1 0 1
A 2 1 1
M 3 2 2
B 4 3 3
O 5 4 4
L 6 5 5
Steps 3 to 6 When i = 3
G U M B O
0 1 2 3 4 5
G 1 0 1 2
A 2 1 1 2
M 3 2 2 1
B 4 3 3 2
O 5 4 4 3
L 6 5 5 4
Steps 3 to 6 When i = 4
G U M B O
0 1 2 3 4 5
G 1 0 1 2 3
A 2 1 1 2 3
M 3 2 2 1 2
B 4 3 3 2 1
O 5 4 4 3 2
L 6 5 5 4 3
Steps 3 to 6 When i = 5
G U M B O
0 1 2 3 4 5
G 1 0 1 2 3 4
A 2 1 1 2 3 4
M 3 2 2 1 2 3
B 4 3 3 2 1 2
O 5 4 4 3 2 1
L 6 5 5 4 3 2
Step 7
The distance is in the lower right hand corner of the matrix, i.e. 2. This corresponds to our intuitive realization that "GUMBO" can be transformed into "GAMBOL" by substituting "A" for "U" and adding "L" (one substitution and 1 insertion = 2 changes).
分享到:
相关推荐
Levenshtein:快速计算编辑距离以及字符串的相似度
文本相似度计算(文本匹配) 余弦相似(Cosine Similarity):两向量求余弦 点积(Dot Product):两向量归一化后求内积 汉明距离(Hamming Distance),编辑距离(Levenshtein Distance),欧氏距离(Euclidean ...
python的工具包,可用于自然语言处理领域,如文本相似度的计算,本人已测,速度相当的快
#region 计算字符串相似度 /// /// 计算字符串相似度 /// /// ”str1″>字符串1 /// ”str2″>字符串2 /// 相似度 public static float Levenshtein(string str1, string str2) {
编辑距离,又称为Levenshtein距离,是用于计算一个字符串转换为另一个字符串时,插入、删除和替换的次数。例如,将’dad’转换为’bad’需要一次替换操作,编辑距离为1。 nltk.metrics.distance.edit_distance函数...
Strutil strutil提供了用于计算字符串相似度的字符串度量标准以及其他字符串实用程序功能。 完整文档可在以下找到: : 。安装 go get github.com/adrg/strutil字符串指标杰罗·温克勒史密斯·沃特曼·高图索伦森-...
在目前这个信息过载的时代,文本的相似度计算应用前景还是比较广泛的,它可以让人们过滤掉很多相似的新闻,比如在搜索引擎上,相似度太高的页面,只需要展示一个就行了。考试的时候,可以用这个来防作弊,同样的,...
▪ Levenshtein ,快速计算字符串相似度。 ▪ Chardet 字符编码探测器,可以自动检测文本、网页、 xml 的编码。 ▪ shortuuid ,一组简洁 URL/UUID 函数库。 ▪ ftfy , Unicode 文本工具 ▪ unidecode , ascii 和 ...
句子相似度簇sensim_cluster使用Levenshtein距离计算文本数据(来自文件)的相似度,并对结果进行聚类(分层聚类)。 聚类结果以树状图显示。用法准备数据文件在下面运行该程序# -*- coding: utf-8 -*-import sys...
t 所需要的最少的插入 删除和替换的数目 在NLP中应用比较广泛 如一些评测方法中就用到了(wer mWer等) 同时也常用来计算你对原文本所作的改动数 编辑距离的算法是首先由俄国科学家Levenshtein提出的 故又叫...
编辑距离 编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。...Python中的Levenshtein包可以方便的计算编辑距离 包的安装: pip install python-Leven
编辑距离就是用来计算从原串(s)转换到目标串(t)所需要的最少的插入,删除和替换的数目,在NLP中应用比较广泛,如一些评测方法中就用到了(wer,mWer等),同时也常用来计算你对原文本所作的改动数。编辑距离的算法...
序号 Python库,用于计算可散列数据类型序列的距离和相似度。 虽然seqsim是作为通用库开发的, seqsim其主要目的是用于文化进化特别是文本传统文化进化领域的研究中。 一些方法充当标准Python库或其他库(例如。安装...
Levenshtein,快速计算字符串相似度。 fuzzywuzzy,字符串模糊匹配。 esmre,正则表达式的加速器。 shortuuid,一组简洁URL/UUID函数库。 ftfy,Unicode文本工具7 unidecode,ascii和Unicode文本转换函数。 xpinyin,将...