什么是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+1,len2+1];for (int a=0;a<=len1;a++){dif[a,0] = a; }for (int a = 0; a <= len2; a++){dif[0, a] = a; }int temp =0;for (int i = 1; i <= len1; i++){for (int j = 1; j <= len2; j++){if (value1[i - 1] == value2[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);}}float similarity=1- (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;}

转载于:https://www.cnblogs.com/ac1985482/p/Levenshtein.html

计算字符串相似度算法—Levenshtein相关推荐

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

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

  2. Levenshtein 相似度算法——Levenshtein(编辑距离)

    https://www.iteye.com/blog/wdhdmx-1343856 原文讲的挺有道理的: 奇妙的地方就是将字符串的对比,转换为了数值之间的计算: 相似度算法--Levenshtein( ...

  3. 一种中文字符串相似度算法

    一种中文字符串相似度算法 概要 标记距离相似算法 扩展 概要 给定一个字符串a,在字符串列表B中找到与a最相似字符串b,或者让列表B按与a相似度排序.本文提出一种算法来较好的解决这个问题.并且该算法很 ...

  4. php数据分析引擎,PHP数据分析引擎计算余弦相似度算法示例

    php 的 PHP数据分析引擎计算余弦相似度算法示例 本文实例讲述了PHP数据分析引擎计算余弦相似度算法.分享给大家供大家参考,具体如下: 关于余弦相似度的相关介绍可参考百度百科: /** * 数据分 ...

  5. 相似度算法 php,PHP计算余弦相似度算法

    这篇文章主要介绍了PHP数据分析引擎计算余弦相似度算法,结合具体实例形式分析了php计算余弦相似度的操作步骤与相关实现技巧,需要的朋友可以参考下 本文实例讲述了PHP数据分析引擎计算余弦相似度算法.分 ...

  6. 最长公共子序列算法 java_转【算法之动态规划(三)】动态规划算法之:最长公共子序列 最长公共子串(LCS)字符串相似度算法...

    1.先科普下最长公共子序列 & 最长公共子串的区别: 找两个字符串的最长公共子串,这个子串要求在原字符串中是连续的.而最长公共子序列则并不要求连续. 2.最长公共子串 其实这是一个序贯决策问题 ...

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

    编辑距离算法 前言 原理 公式 例子 实现 后记 前言 比较两个字符串的相似度,通常我们会使用编辑距离算法来实现. 下面是常用字符串相似度计算的方法: 字符串相似度的几种度量方法 原理 最小编辑距离的 ...

  8. php文章相似度计算,PHP相似度算法

    写了很久忘保存了,囧没了,先放这里 catalogue 1. TF-IDF2. 基于空间向量的余弦算法3. 最长公共子序列4. 最小编辑距离算法5. similar_text 1. TF-IDF Re ...

  9. 相似度算法——Levenshtein(编辑距离)

    概念 Levenshtein 距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数. 许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符. 编辑距离 ...

最新文章

  1. 使用CSS样式对表格进行美化并对伪类的使用进行解析
  2. STM32开发 -- VS2017错误
  3. spark中的广播变量broadcast
  4. centos 远程安装java程序_centos7远程服务器中redis的安装与java连接
  5. 8个成语接龙首尾相连_成语接龙(至少8个)
  6. Java基础学习总结(110)——Java主要技术点总结
  7. 浙江省二级计算机试题,2015浙江省计算机等级考试试题 二级ACCESS考试题库
  8. python 消息中间件_如何评价腾讯开源的消息中间件TubeMQ?
  9. Hadoop The Definitive Guide:Hadoop权威指南-PART 1
  10. Java 面试之算法
  11. nexus下载 通过官网下载
  12. 路径规划—入门路径规划概念
  13. 关于医学影像中的轴位面(横断面)、冠状面、矢状面的解释(转载)
  14. 亚马逊智能音箱无故发出笑声,多名用户被吓尿
  15. 用Meta标签代码让360双核浏览器默认极速模式
  16. FM-分解机模型详解
  17. mysql不可重复读和重复读_MySql隔离级别:RU / RC / RR / S + 脏读 / 不可重复读 / 幻读 / 可重复读...
  18. mybatis-plus 有了这只小鸟,从此告别加班福报
  19. c语言编程物理实验,大学物理实验报告大全C语言编程在大学物理实验中处理数据的研究...
  20. VIIRS TOOLSv3.0版本(专用于处理VIIRS一级数据,可反演气溶胶等)

热门文章

  1. Activity的用法(三):开启网页 (没有弹出浏览器,不清楚是什么原因)
  2. HDU2016 数据的交换输出
  3. 他是中国投资最厉害的人:投网易一战成名 是巴菲特忠实信徒
  4. Linux实用命令大合集(长期更新)
  5. python ---Pandas时间序列:生成指定范围的日期
  6. Day12 Java异常处理与程序调试
  7. Python系统命令操作
  8. html5 历史管理
  9. s2sh乱码一个小处理(新手按流程走)
  10. 看懂OpenCV中IplImage转换成CvMat的语句:CvMat sstub, *src = cvGetMat(srcarr, sstub);