计算字符串相似度算法—Levenshtein
什么是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的更多相关文章
- 计算字符串相似度算法——Levenshtein
转自:http://wdhdmx.iteye.com/blog/1343856 0.这个算法实现起来很简单 1.百度百科介绍: Levenshtein 距离,又称编辑距离,指的是两个字符串之间,由一个 ...
- 字符串相似度算法——Levenshtein Distance算法
Levenshtein Distance 算法,又叫 Edit Distance 算法,是指两个字符串之间,由一个转成另一个所需的最少编辑操作次数.许可的编辑操作包括将一个字符替换成另一个字符,插入一 ...
- 字符串相似度算法-LEVENSHTEIN DISTANCE算法
Levenshtein Distance 算法,又叫 Edit Distance 算法,是指两个字符串之间,由一个转成另一个所需的最少编辑操作次数.许可的编辑操作包括将一个字符替换成另一个字符,插入一 ...
- 字符串相似度算法(编辑距离算法 Levenshtein Distance)(转)
在搞验证码识别的时候需要比较字符代码的相似度用到“编辑距离算法”,关于原理和C#实现做个记录. 据百度百科介绍: 编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个 ...
- 用C#实现字符串相似度算法(编辑距离算法 Levenshtein Distance)
在搞验证码识别的时候需要比较字符代码的相似度用到"编辑距离算法",关于原理和C#实现做个记录. 据百度百科介绍: 编辑距离,又称Levenshtein距离(也叫做Edit Dist ...
- [转]字符串相似度算法(编辑距离算法 Levenshtein Distance)
转自:http://www.sigvc.org/bbs/forum.php?mod=viewthread&tid=981 http://www.cnblogs.com/ivanyb/archi ...
- 字符串相似度算法(编辑距离算法 Levenshtein Distance)
在搞验证码识别的时候需要比较字符代码的相似度用到“编辑距离算法”,关于原理和C#实现做个记录.据百度百科介绍:编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串 ...
- 字符串相似度算法(编辑距离Levenshtein Distance)的应用场景
应用场景 DNA分析: 将DNA的一级序列如β-球蛋白基因的第一个外显子(Exon)转化为分子“结构图”,然后由所得“结构图”提取图的不变量,如分子连接性指数.以图的不变量作为自变量,再由相似度计算公 ...
- PHP中计算字符串相似度的函数代码
similar_text — 计算两个字符串的相似度 int similar_text ( string $first , string $second [, float &$percent ...
随机推荐
- 经验:使用 Cache 时注意 DateTime.Now
如果使用了缓存,比如方法 A 吧,那么你需要注意 DateTime.Now 对缓存的影响,简单来说,DateTime.Now 可能出现在两个地方: 在调用方,将 DateTime.Now 作为参数传递 ...
- boost 线程安全队列
threadnullmethodsprocessingobjectsignal // QueueImplementation.cpp : Defines the entry point for the ...
- 如何将Revit明细表导出为Excel文档
Revit软件没有将明细表直接导出为Excel电子表格的功能,Revit只能将明细表导出为TXT格式,但是这种TXT文件用EXCEL处理软件打开然后另存为XLS格式即可,以Revit2013版自带的建 ...
- 从YOLOv1到YOLOv3,目标检测的进化之路
https://blog.csdn.net/guleileo/article/details/80581858 本文来自 CSDN 网站,作者 EasonApp. 作者专栏: http://dwz.c ...
- Android性能优化-App后台优化
原文链接 Background Optimizations 前言 后台进程是内存和电池敏感的.一个隐式的broadcast可能会启动很多监听它的后台进程,即使这些进程可能做得工作不多.这可能丢设备性能 ...
- 后台任务hangfire
Installation¶ There are a couple of packages for Hangfire available on NuGet. To install Hangfire in ...
- 〖Linux〗Ubuntu用户重命名、组重命名,机器重命名~
有时候得到的一台机器名字并不是自己熟悉的,或许是你只是想希望修改一下用户名等等-- 步入正题,其实很简单的,重启机器之后不要进入桌面,按下Ctrl+Alt+F1,使用Root登录,执行以下命令: # ...
- python3用BeautifulSoup抓取图片地址
# -*- coding:utf-8 -*- #python 2.7 #XiaoDeng #http://tieba.baidu.com/p/2460150866 #抓取图片地址 from bs4 i ...
- Notes 和 Domino 已知限制
Notes 和 Domino 已知限制 功能测试 限制数据库的最大大小是多少? 最大的 OS 文件大小限制 -(最大为 64GB)文本域的最大大小是多少? 15KB(存储):15KB,显示在视图列中R ...
- SQL语句调优三板斧
改装有顺序------常开的爱车下手 你的系统中有成千上万的语句,那么优化语句从何入手呢 ? 当然是系统中运行最频繁,最核心的语句了.废话不多说,上例子: 这是一天的语句执行情况,里面柱状图表示的是对 ...