/**
Levenshtein distance最先是由俄国科学家Vladimir Levenshtein在1965年发明,用他的名字命名。不会拼读,可以叫它edit distance(编辑距离)。
Levenshtein distance可以用来:
Spell checking(拼写检查)
Speech recognition(语句识别)
DNA analysis(DNA分析)
Plagiarism detection(抄袭检测)
LD用m*n的矩阵存储距离值。算法大概过程:
str1或str2的长度为0返回另一个字符串的长度。
初始化(n+1)*(m+1)的矩阵d,并让第一行和列的值从0开始增长。
扫描两字符串(n*m级的),如果:str1[i] == str2[j],用temp记录它,为0。否则temp记为1。然后在矩阵d[i][j]赋于d[i-1][j]+1 、d[i][j-1]+1、d[i-1][j-1]+temp三者的最小值。
扫描完后,返回矩阵的最后一个值即d[n][m]
*/
public class LD
{
/**
* 计算矢量距离
* Levenshtein Distance(LD)
* @param str1 str1
* @param str2 str2
* @return ld
*/
public int ld(String str1, String str2)
{
//Distance
int [][] d;
int n = str1.length();
int m = str2.length();
int i; //iterate str1
int j; //iterate str2
char ch1; //str1
char ch2; //str2
int temp;
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++)
{
ch1 = str1.charAt(i - 1);
//match str2
for (j = 1; j <= m; j++)
{
ch2 = str2.charAt(j - 1);
if (ch1 == ch2)
{
temp = 0;
}
else
{
temp = 1;
}
d[i][j] = min(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + temp);
}
}
return d[n][m];
}
private int min(int one, int two, int three)
{
int min = one;
if (two < min)
{
min = two;
}
if (three < min)
{
min = three;
}
return min;
}
/**
* 计算相似度
* @param str1 str1
* @param str2 str2
* @return sim
*/
public double sim(String str1, String str2)
{
int ld = ld(str1, str2);
return 1 - (double) ld / Math.max(str1.length(), str2.length());
}
/**
* 测试
* @param args
*/
public static void main(String[] args)
{
LD ld = new LD();
double num = ld.sim("xie", "xies");
System.out.println(num);
}
}
分享到:
相关推荐
在信息技术领域,字符串处理是常见的任务之一,其中计算两个字符串的相似度是尤为重要的一个环节。Levenshtein算法,也称为编辑距离算法,就是用于衡量两个字符串之间差异程度的一种方法。本文将深入探讨如何使用...
计算两个字符串相似度,返回0-1的相似值 0为完全不同,1位完全相同 例如:上海如家酒店中环店,以下是与其比较的相似度 上海如家酒店中环店 1.000000 上海中环店如家酒店 0.888889 上海中环如家酒店 0.823529 如家...
通过这些文件,你可以看到一个完整的DELPHI项目,它实现了LCS算法并展示了一个简单的用户界面来输入两个字符串并计算它们的相似度。当你运行LCSProject.exe时,可以输入字符串并观察输出的相似度结果。 总的来说,...
字符串相似度算法是一种衡量两个字符串之间相似度的方法,广泛应用于自然语言处理、数据挖掘、机器学习等领域。在本文中,我们将讨论一种常用的字符串相似度算法:Levenshtein Distance。 什么是Levenshtein ...
通过上述实现,我们可以有效地计算两个字符串之间的相似度,并根据需要进行排序。然而,这种方法存在一些潜在的问题: - **性能问题**:对于非常大的字符串,这种逐字符比较的方式可能会非常慢。 - **多字节字符处理...
通过计算两个字符串的词袋模型向量之间的夹角余弦值来衡量相似性。词袋模型忽略了词语的顺序,只关注词汇的出现与否。 7. **Smith-Waterman 算法**: 在生物信息学中常用,通过局部对齐找到两个序列的最大匹配...
3. **余弦相似度**:它通过计算两个字符串的向量在高维空间中的夹角余弦值来评估相似性。每个字符串被看作是一个词频向量,向量的夹角越小,相似度越高。 4. **Hamming距离**:如果两个字符串长度相同,Hamming距离...
用途:可用于论文抄袭检测、DNA等。...算法实现思路:通过对一个字符串插入、删除、替换转变成另一个字符串所需要的步骤称为距离,计算两个字符串之间的距离,从而可以得到两个字符串之间的相似度。
Levenshtein Distance(简称LD),又称编辑距离,是衡量两个字符串相似度的一种方法。这个概念由俄国科学家Vladimir Levenshtein在1965年提出,因此得名。 编辑距离定义了将一个字符串转换成另一个字符串所需的最少...
3. **余弦相似度**:这是一种基于向量空间模型的方法,通过计算两个字符串的词频向量的夹角余弦值来确定它们的相似性。在Delphi中,可以先将字符串转换为词频向量,然后使用向量的点积和模长来计算相似度。 4. **...
Levenshtein算法,也称为编辑距离算法,是由俄国数学家Vladimir Levenshtein在1965年提出的一种衡量两个字符串相似度的方法。这个算法基于动态规划原理,可以计算出将一个字符串转换成另一个字符串所需要的最少单...
在PHP编程语言中,`similar_text()`函数是一种用于计算两个字符串相似度的实用工具。它可以帮助开发者在处理文本数据时,评估两个字符串之间的相似性,例如在搜索引擎优化、文本匹配或内容过滤等场景。下面我们将...
总结起来,这个Java项目提供了计算两个字符串相似度的方法,主要利用了最长公共子序列的概念和动态规划算法。通过理解并实现这个项目,开发者可以增强对字符串处理、动态规划以及相似度计算的理解,这对进行文本分析...
C#中文文本匹配,字符串匹配,中文词语匹配,计算2个句子相似度 中文匹配C#中文文本匹配,字符串匹配,中文词语匹配,计算2个句子相似度 C#中文文本匹配,字符串匹配,中文词语匹配,计算多个句子相似度 C#中文文本...
这个项目以Java和JSP技术为基础,实现了一个计算两个字符串相似度的功能,并能显示运行时间,这有助于理解算法的效率。 首先,我们需要了解字符串相似度的计算方法。常见的算法有Levenshtein距离、Jaccard相似度、...
字符串相似度是评估两个字符串之间相似程度的一种度量。在很多情况下,我们不关心字符串是否完全相同,而是关注它们之间的相似性。例如,拼写检查、自动补全、模糊搜索等功能就利用了字符串相似度的计算。 最短编辑...
1. **Levenshtein距离**:由俄国科学家Levenshtein提出,它定义了两个字符串之间的最小编辑距离,即最少需要多少次插入、删除或替换操作才能将一个字符串转换为另一个。这种算法适用于拼写纠错和查找近似匹配。 2. ...
除了编辑距离外,Levenshtein库还提供了其他有用的功能,如`ratio`函数,它能计算两个字符串的相似度,返回值范围在0到1之间,值越接近1表示相似度越高: ```python from Levenshtein import ratio ratio('kitten',...
3. **余弦相似度**:通过计算两个字符串的向量表示之间的夹角余弦值来评估相似性,适用于较长文本的比较。 4. **Jaro-Winkler距离**:特别适合名字和地址等短字符串的比较,考虑了字符的顺序和位置。 5. **Hamming...
3. **余弦相似度(Cosine Similarity)**:在向量空间模型中,通过计算两个字符串对应的词袋模型向量的夹角余弦值来衡量它们的相似性。这种方法在文本分析中很常见。 4. **汉明距离(Hamming Distance)**:如果两...