编辑距离算法其实就是,在规定的编辑操作(替换字符串、插入字符串、删除字符串)中,经过几步可以把一个字符串变成另一个字符串,而这个所需的步数就是你的编辑距离。

测试样例:

str1 = abc

str2 = yabd

表里的每一个值都代表着将str1转换成str2所需要的步数,每个单元格的值都遵循这样一个规律,第一行和第一列都是从0到n;其他的值要分情况计算,行索引和列索引对比大小,相同的话直接取左上方单元格的值,不同的话对比其左上方、左边、上边,找到三个单元格之中的最小值再加1即这个单元格的值。

str1 a b c
str2
0 1 2 3
y 1 1 2 3
a 2 1 2 3
b 3 2 1 2
d 4 3 3 2

最后一个单元格的值就是两个字符串间不同字符的个数,利用这个数与两个字符串中最长的长度相除就得到了不相似的程度,再用1减去就是相似率。

public class FileCompared {public static void main(String[] args) {String str1 = "ABCDEFGZ";String str2 = "ABFDFEGXY";System.out.println("两个字符串的相似率为:" + similarRates(str1,str2) +"%");}//定义一个similarRates方法获取两个字符串间不同字符的个数并求出两个字符串的相似率public static int similarRates(String str1 , String str2){//确定二维距离表distance的维度int str1Len = str1.length();int str2Len = str2.length();//如果一个字符串的内容为空就返回另一个字符串的长度if (str1Len == 0) return str2Len;if (str2Len == 0) return str1Len;//定义一张二维距离表distanceint[][] distance = new int[str1Len + 1][str2Len + 1];//给二维数组的第一行第一列赋值int maxLen = str1Len > str2Len ? str1Len : str2Len;for (int num = 0; num < maxLen + 1; num++){if (num<str1Len + 1) distance[num][0] = num;if (num<str2Len + 1) distance[0][num] = num;}/*** 补全二维数组除第一行第一列的其他值* 行列索引进行对比,相同的话直接取左上方值,不同的话采用最小距离算法*/for (int row = 1; row < str1Len+1; row++){char c1 = str1.charAt(row - 1);for (int col = 1; col < str2Len+1; col++){char c2 = str2.charAt(col - 1);if (c1 == c2) {distance[row][col] = distance[row - 1][col - 1];} else {// 最小距离算法就是,取该元素左上方值、左边值、上边值,找到三个之中的最小值再加1即最终距离distance[row][col] = mostMin(distance[row-1][col], distance[row][col-1], distance[row-1][col-1]) + 1;}}}//二维数组中的最后一个元素即是两个字符串间不同字符的个数int notSimilarNum = distance[str1Len][str2Len];//求出相似率double similarRates = (1- (double)notSimilarNum / maxLen)*100;return (int)similarRates;}//取三个数中的最小值public static int mostMin(int up, int left, int upLeft){int min = up < left ? up : left;min = min < upLeft ? min : upLeft;return min;}
}

如此便求出了两个字符串的相似率,字符串换成读取文件的话就可以得到两个文件的相似度。

java实现编辑距离算法(levenshtein distance),计算字符串或者是文本之间的相似度【附代码】相关推荐

  1. 莱文斯坦距离(编辑距离)算法 (Levenshtein Distance Algorithm)

    什么是 莱文斯坦距离算法 (Levenshtein Distance Algorithm) ? Levenshtein Distance,莱文斯坦距离,通常被称为编辑距离(Edit Distance) ...

  2. 详解编辑距离算法-Levenshtein Distance

    目录 •写在前面 •什么是编辑距离? •思路 •思路可视化 •代码实现 •写在前面 编辑距离算法被数据科学家广泛应用,是用作机器翻译和语音识别评价标准的基本算法.最简单的方法是检查所有可能的编辑序列, ...

  3. 一文详解编辑距离(Levenshtein Distance)

    更多博文请关注:https://blog.bigcoder.cn 一. 什么是Levenshtein Distance Levenshtein Distance,一般称为编辑距离(Edit Dista ...

  4. 最小编辑距离算法 Edit Distance(经典DP)

    最小编辑距离算法 Edit Distance(经典DP) 转载baodream 最后发布于2018-05-23 11:36:32 阅读数 22226  收藏 展开 编辑距离(Edit Distance ...

  5. Java对象,Map,List,Set数组等相互转换大全(详细讲解,附代码,讲解案例)

    Java对象,Map,List,Set数组等相互转换大全(详细讲解,附代码,讲解案例) Java对象 转 JSON字符串 JAVA对象转MAP Map转java对象 List转map List和Map ...

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

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

  7. 编辑距离及编辑距离算法 | Levenshtein距离 |DP

    感谢:http://www.cnblogs.com/biyeymyhjob/archive/2012/09/28/2707343.html 加一点自己理解 编辑距离概念描述: 编辑距离,又称Leven ...

  8. 从利用gensim 训练好的word2vec模型中取出向量并计算余弦相似度,Levenshtein distance 计算

    1.Levenshtein distance 表示两个字符串之间,由一个转成另一个所需的最少编辑次数,允许的操作有:替换.插入和删除 导入包: import Levenshtein #Levensht ...

  9. matlab源代码 语义相似度计算,如何计算两个句子之间的相似度(句法和语义)...

    我应该每次取两个句子并计算它们是否相似.我的意思是,在语法和语义上都是这样.如何计算两个句子之间的相似度(句法和语义) INPUT1:奥巴马签署法律.奥巴马签署了一项新法律. INPUT2: 总线停在 ...

最新文章

  1. HBase shell 中的十六进制数值表示
  2. 怎么彻底删除oracle
  3. 第四章:系统困境之 在归因错误下拼命努力
  4. Windows UI风格的设计(9)
  5. HTML5 file api读取文件的MD5码工具
  6. 终于有人把超融合和边缘计算说清楚了
  7. ROS入门笔记(九):编写ROS的第一个程序hello world(重点)
  8. 【Mac brew】代理安装brew insall
  9. vue-router页面传值及接收值
  10. 宾馆管理系统(做了ppt忘记发博客了)
  11. 软件项目管理--软件工作量估算
  12. 小米蓝牙耳机不能串联问题解决
  13. Java基础——分隔符
  14. 借机,贷记,往帐,来帐
  15. 计算机的文档库在哪哪里,电脑的word文档在哪里
  16. python基础学习 1
  17. getcwd()和chdir()的用法 python
  18. BMP文件二进制格式详解
  19. win10+vs2017配置mpi环境的记录(已成功)
  20. 基于mindwave脑电波进行疲劳检测算法的设计(4)

热门文章

  1. java短信验证码功能发送的验证码如何校验_企业如何选择短信平台才能保障安全和稳定性?...
  2. antd 进行ajax请求,react+dva+antd接口调用方式
  3. java 实体类 代码重复_java – JPA两个单向@OneToMany关系到同一个实体导致重复输入...
  4. gbase迁移mysql_基于datax实现从gbase到mysql的数据迁移--时间字段篇
  5. oracle使用关键字做表字段名_ArcGIS SQL使用
  6. Python frozenset 集合 - Python零基础入门教程
  7. 通过docker无法访问到tomcat报页面404
  8. BugkuCTF-PWN题pwn7-repeater详细讲解多解法
  9. oracle管理员登录报错,关于Oracle使用管理员账号登录失败的问题
  10. 项目七samba服务器,Centos 7 配置Samba服务器