什么是Levenshtein

Levenshtein 距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。levenshtein() 函数返回两个字符串之间的 Levenshtein 距离。编辑距离的算法是首先由俄国科学家Levenshtein提出的,故又叫Levenshtein Distance

实现过程

首先我们明确从一个字符串变化到另一个字符串需要进行添加、修改、删除来变化

如a变化到ab需要一步,添加一个b,

aa变化到ab需要修改一个a到b,

ab变化到a需要删除一个b。

首先我们确定了两个字符串str1,str2;假设这两个字符为a1a2a3a4......,b1b2b3......

那么构建一个二维矩阵

空   a1  a2  a3  a4 ......

空     [1]   [2]   [3]   [4]     [5]......

b1    [6]   [7]   [8]   [9]     [10]......

b2    [11]  [12]  [13] [14]   [15]......

b3    [16] [17]   .......

...

1.判断[1]左边为空,上面为空,从空到空需要变化0次

2.所以可以得到下面的矩阵

空   a1  a2  a3  a4 ......

空     0      1      2      3       4......

b1    1      [7]   [8]   [9]     [10]......

b2    2       [12]  [13] [14]   [15]......

b3    3      [17]   .......

.......

3.到7的位置表示了[空a1]变化到[空b1],这里我们需要得到三个值

1)从[2]变化到[7]需要的步数是[2]+1

2)从[6]变化到[7]需要的变化是[6]+1

3) 从[1]变化到[7]需要的变化是 ,如果a1=b1,那么需要0步,如果a1!=b1,那么需要删除一个a1在添加一个b1,需要2步,也就是大于1步。

我们取这三步中所需走的最短步数填到[7]的位置   。

4.以此推得到

Amn的值为Am-1n+1,Amn-1+1,Am-1n-1+x(当am=bn时x=0,否则x=2)的最小值

5.当求得的值的最后一位得到的值N,用1-n/(max(len(a),len(b)))得到相关度。

实现代码

 /// <summary>
/// Levenshtein 算法实现
/// </summary>
/// <param name="value1"></param>
/// <param name="values2"></param>
/// <returns></returns>
public static float Leven(string value1, string value2)
{
int len1 = value1.Length;
int len2 = value2.Length;
int [,] dif =new int[len1+,len2+];
for (int a=;a<=len1;a++)
{
dif[a,] = a;
}
for (int a = ; a <= len2; a++)
{
dif[, a] = a;
}
int temp =;
for (int i = ; i <= len1; i++)
{
for (int j = ; j <= len2; j++)
{
if (value1[i - ] == value2[j - ])
{ temp = ; }
else
{
temp = ;
}
dif[i,j] = Min(dif[i - ,j - ] + temp, dif[i,j - ] + ,
dif[i - ,j] + );
}
} float similarity=- (float)dif[len1, len2]/Math.Max(len1,len2);
return similarity;
} public static int Min(int a, int b, int c)
{
int i = a < b ? a : b;
return i = i < c ? i : c;
}

计算字符串相似度算法—Levenshtein的更多相关文章

  1. 计算字符串相似度算法——Levenshtein

    转自:http://wdhdmx.iteye.com/blog/1343856 0.这个算法实现起来很简单 1.百度百科介绍: Levenshtein 距离,又称编辑距离,指的是两个字符串之间,由一个 ...

  2. 字符串相似度算法——Levenshtein Distance算法

    Levenshtein Distance 算法,又叫 Edit Distance 算法,是指两个字符串之间,由一个转成另一个所需的最少编辑操作次数.许可的编辑操作包括将一个字符替换成另一个字符,插入一 ...

  3. 字符串相似度算法-LEVENSHTEIN DISTANCE算法

    Levenshtein Distance 算法,又叫 Edit Distance 算法,是指两个字符串之间,由一个转成另一个所需的最少编辑操作次数.许可的编辑操作包括将一个字符替换成另一个字符,插入一 ...

  4. 字符串相似度算法(编辑距离算法 Levenshtein Distance)(转)

    在搞验证码识别的时候需要比较字符代码的相似度用到“编辑距离算法”,关于原理和C#实现做个记录. 据百度百科介绍: 编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个 ...

  5. 用C#实现字符串相似度算法(编辑距离算法 Levenshtein Distance)

    在搞验证码识别的时候需要比较字符代码的相似度用到"编辑距离算法",关于原理和C#实现做个记录. 据百度百科介绍: 编辑距离,又称Levenshtein距离(也叫做Edit Dist ...

  6. [转]字符串相似度算法(编辑距离算法 Levenshtein Distance)

    转自:http://www.sigvc.org/bbs/forum.php?mod=viewthread&tid=981 http://www.cnblogs.com/ivanyb/archi ...

  7. 字符串相似度算法(编辑距离算法 Levenshtein Distance)

    在搞验证码识别的时候需要比较字符代码的相似度用到“编辑距离算法”,关于原理和C#实现做个记录.据百度百科介绍:编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串 ...

  8. 字符串相似度算法(编辑距离Levenshtein Distance)的应用场景

    应用场景 DNA分析: 将DNA的一级序列如β-球蛋白基因的第一个外显子(Exon)转化为分子“结构图”,然后由所得“结构图”提取图的不变量,如分子连接性指数.以图的不变量作为自变量,再由相似度计算公 ...

  9. PHP中计算字符串相似度的函数代码

    similar_text — 计算两个字符串的相似度 int similar_text ( string $first , string $second [, float &$percent ...

随机推荐

  1. 鼠标滑过table时修改表格行的背景颜色

    方法一: #customers tr:hover { background-color: #f00; } 方法二: <tr onmouseover="style.backgroundC ...

  2. 【Windows】Windows中解析DOS的for命令使用

    目录结构: contents structure [+] 简介 for /d ... in ... 案例 案例:打印C://根目录下所有的文件夹名称 案例:打印当前路径下,只有1-3个字母的文件夹名 ...

  3. Self-Host

    寄宿Web API 不一定需要IIS 的支持,我们可以采用Self Host 的方式使用任意类型的应用程序(控制台.Windows Forms 应用.WPF 应用甚至是Windows Service) ...

  4. WRI$_ADV_OBJECTS表过大,导致PDB的SYSAUX表空间不足

    现象监控发现sysaux表空间使用不断增加,导致表空间不足 查看过程 查看版本: SQL> select * from v$version; BANNER CON_ID ------------ ...

  5. system函数遇到的问题

     这几天调程序(嵌入式linux),发现程序有时就莫名其妙的死掉,每次都定位在程序中不同的system()函数,直接在shell下输入system()函数中调用的命令也都一切正常.就没理这个bug,以 ...

  6. 9.6 翻译系列:数据注解之Index特性【EF 6 Code-First系列】

    原文链接:https://www.entityframeworktutorial.net/entityframework6/index-attribute-in-code-first.aspx EF ...

  7. s:if 标签 字符串比较 正确用法和错误用法

    transaction.tjpopState 该对象在后台是枚举类型,在前台需要转为字符串才能比较. 错误一: <s:if test='transaction.tjpopState!=" ...

  8. Atitit 数据库视图与表的wrap与层级查询规范

    Atitit 数据库视图与表的wrap与层级查询规范 1.1. Join层..连接各个表,以及显示各个底层字段1 1.2. 统计层1 1.3. 格式化层1 1.1. Join层..连接各个表,以及显示 ...

  9. 100种不同图片切换效果插件pageSwitch

    分享100种不同图片切换效果插件pageSwitch.这是一款适用于全屏切换场景,即一切一屏,并且实现了超过一百种切换效果,支持自定义切页动画.效果图如下: 在线预览   源码下载 实现的代码. ht ...

  10. 【iCore4 双核心板_FPGA】例程九:锁相环实验——锁相环使用

    实验现象: 利用Quartus内部组件生成锁相环,用SignalTap II进行校验. 核心代码: module pll( input clk_25m, output clk_100m, output ...