利用编辑距离(Edit Distance)计算两个字符串的相似度

利用编辑距离(Edit Distance)计算两个字符串的相似度

 

        编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。一般来说,编辑距离越小,两个串的相似度越大。

 

        例如将kitten一字转成sitting:

        sitten (k→s)
        sittin (e→i)
        sitting (→g)

        俄罗斯科学家Vladimir Levenshtein在1965年提出这个概念。

 

        之前用jsoup做网络爬虫的时候用到了这个来计算两个字符串的相似度,今天整理出来向Vladimir Levenshtein致敬。

 

/**
 * 编辑距离(Edit Distance)求字符串相似度
 * @author InJavaWeTrust http://injavawetrust.iteye.com
 *
 */
public class EditDistance {
	
	/**
     * 求三个数中最小的一个
     * @param one
     * @param two
     * @param three
     * @return
     */
	public int min(int one, int two, int three) {
		int min = one;
		if (two < min) {
			min = two;
		}
		if (three < min) {
			min = three;
		}
		return min;
	}

    /**
     * 求编辑距离(Edit Distance)
     * @param str1
     * @param str2
     * @return 编辑距离
     */
	public int editDistance(String str1, String str2) {
		int d[][]; // 矩阵
		int y = str1.length();
		int x = str2.length();
		char ch1; // str1的
		char ch2; // str2的
		int temp; // 记录相同字符,在某个矩阵位置值的增量,不是0就是1
		if (y == 0) {
			return x;
		}
		if (x == 0) {
			return y;
		}
		d = new int[y + 1][x + 1]; // 计算编辑距离二维数组
		for (int j = 0; j <= x; j++) { // 初始化编辑距离二维数组第一行
			d[0][j] = j;
		}
		for (int i = 0; i <= y; i++) { // 初始化编辑距离二维数组第一列
			d[i][0] = i;
		}
		for (int i = 1; i <= y; i++) { // 遍历str1
			ch1 = str1.charAt(i - 1);
			// 去匹配str2
			for (int j = 1; j <= x; j++) {
				ch2 = str2.charAt(j - 1);
				if (ch1 == ch2) {
					temp = 0;
				} else {
					temp = 1;
				}
				// 左边+1,上边+1, 左上角+temp取最小
				d[i][j] = min(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + temp);
			}
		}
		return d[y][x];
	}

    /**
     * 计算相似度
     * @param str1
     * @param str2
     * @return
     */
	public double similar(String str1, String str2) {
		int ed = editDistance(str1, str2);
		return 1 - (double) ed / Math.max(str1.length(), str2.length());
	}
	
	public static void main(String[] args) {
		String str1 = "1234";
		String str2 = "1254";
		System.out.println("字符串相似度: " + new EditDistance().similar(str1, str2));
	}
}

 

 运行结果:



 

LeetCode之计算字符串相似度或编辑距离EditDistance 问题描述:/** * Given two words word1 and word2, find the minimum number of steps required to * convert word1 to word2. (each operation is counted as 1 step.) * * You have the following 3 operations pe 阅读详情

相关推荐

编辑距离算法(Edit Distance)

目录 概念 算法过程 Python实现 概念 编辑距离的作用主要是用来比较两个字符串的相似度的 基本的定义如下所示: 编辑距离,又称Levenshtein距离(莱文斯坦距离也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数,如果它们的距离越大,说明它们越是不同。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。 这个概念是由俄罗斯科学家Vladimir Levenshtein在1965年提出来的,所以也叫 Levens.

Python,数据分析,机器学习,深度学习 7996

字符串相似度之编辑距离算法

字符串编辑距离: 是一种字符串之间相似度计算的方法。给定两个字符串S、T,将S转换成T所需要的删除,插入,替换操作的数量就叫做S到T的编辑路径。而最短的编辑路径就叫做字符串S和T的编辑距离。举个例子:S=“eeba”   T="abac"   我们可以按照这样的步骤转变:(1) 将S中的第一个e变成a;(2) 删除S中的第二个e;(3)在S中最后添加一个c; 那么S到T的编辑路径就等于3。当然,这...

u011060897的专栏 1402

编辑距离算法,比较字符串相似度

编辑距离算法,比较字符串相似度 pb11.5版本

使用编辑距离算法测算两个字符串的相似度 (吉林大学 孙立鑫)

模糊搜索,求两个字符串的相似度。

langke123654的博客 314

两个字符串的相似度算法实现——编辑距离之Levenshtein距离

两个字符串的相似度算法实现——编辑距离之Levenshtein距离

字符串相似度算法 levenshtein distance 编辑距离算法

NULL 博文链接:https://biansutao.iteye.com/blog/326008

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

1.概念   编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数。许可的编辑操作包括:(1)将一个字符替换成另一个字符,(2)插入一个字符,(3)删除一个字符。   相似度,等于“编辑距离+1”的倒数。 2.分析   设有字符串a[0...n],b[0...m]。   (1)当a[i]=b[j]时,说明这时候不需要编辑操作。编辑距离保持,即f(i,j)=f(i-1,...

weixin_30485799的博客 600

使用最短编辑距离算法判断两个字符串的相似度

使用最短编辑距离算法判断两个字符串的相似度

java计算句子相似度的代码_4种方法计算句子相似度

Edit Distance计算两个字符串之间,由一个转成另一个所需要的最少编辑次数,次数越多,距离越大,也就越不相关。比如,“xiaoming”和“xiamin”,两者的转换需要两步:去除‘o’去除‘g’所以,次数/距离=2。!pip install distanceimport distancedef edit_distance(s1, s2):return distance.levenshte...

weixin_29363945的博客 643

远距离长航时低成本泡沫垂直起降固定翼无人机技术详解

该技术通过采用泡沫材料制造无人机机体,并结合高效的垂直起降与固定翼飞行机制,实现了低成本、长航时、远距离的飞行能力。然而,需要注意的是,泡沫材料在强度和耐候性方面可能较传统金属材料有所不足,因此在设计和制造过程中需要采取额外的加固和防护措施。用于森林防火、水域监测、空气质量检测等场景,通过搭载相应的传感器和摄像设备,对大范围区域进行高效、精准的监测。- 增强智能化水平:集成更多先进的传感器、算法和人工智能技术,提升无人机的自主决策能力和作业效率。

专注多旋翼、复合翼无人机技术研究,从事低空经济行业。 1202

迅投miniQMT量化交易之【网格交易】的实现(25)——写在最后

和大家一起分享如何使用miniQMT实现我们自己的网格交易系统。如果您对量化交易感兴趣,欢迎一起交流。

tzzqn2008的专栏 831

python生成相似句子_4种方法计算句子相似度

Edit Distance计算两个字符串之间,由一个转成另一个所需要的最少编辑次数,次数越多,距离越大,也就越不相关。比如,“xiaoming”和“xiamin”,两者的转换需要两步:去除‘o’去除‘g’所以,次数/距离=2。!pip install distanceimport distancedef edit_distance(s1, s2):return distance.levenshte...

weixin_39758696的博客 1744

RK3568平台(KBuild篇)KBuild编译体系

从Linux内核2.6开始,Linux内核的编译采用Kbuild系统,这和过去的编译系统有很大的不同,尤其对于Linux内核模块的编译。在新的系统下,Linux编译系统会两次扫描Linux的Makefile:首先编译系统会读取Linux内核顶层的Makefile,然后根据读到的内容第二次读取Kbuild的Makefile来编译Linux内核。kbuild,即 kernel build,用于编译 Linux 内核文件。

weixin_49303682的博客 349

相似度计算方法-编辑距离 (Edit Distance)

编辑距离 (Edit Distance)的定义、计算公式、代码实现、优劣势以及应用场景

xy2006860的专栏 4254

YOLOv11改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 StarNet,超级精简高效的轻量化模块

本文记录的是基于StarNet的YOLOv11轻量化改进方法研究。StarNet设计简洁,没有复杂的设计和精细调整的超参数,仅是一个 4 阶段的分层架构。并且其中能够在低维空间计算的同时考虑极高维的特征这一特性,进而提高模型精度。本文在替换骨干网络中配置了原论文中的starnet_s1starnet_s2starnet_s3和starnet_s4七种模型,以满足不同的需求。

Limiiiing的博客 6001

【实现100个unity特效之4】Unity ShaderGraph使用教程与各种特效案例(2023/12/1更新)

ShaderGraph是Unity中的一个可视化工具,用于创建和编辑图形着色器。其意义在于简化编写复杂着色器的过程,减少对具体编程语言的依赖,使艺术家和设计师可以更方便地创建各种美术效果。使用ShaderGraph可以通过图形界面设置着色器属性,包括颜色、纹理、光照等,并在视窗预览中即时显示结果,从而快速迭代和调整着色器。使用ShaderGraph需要先安装Unity 2018.1或以上版本,并添加ShaderGraph插件。打开ShaderGraph面板后,可以通过拖放节点并连接它们来创建着色器。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 4万+

编辑距离(Edit Distance) 一文读懂(Python实现)

在NLP任务中经常会碰到比较两个字符串的相似度,比如拼写纠错和指代判断。用户很可能在搜索时输入错别字,比如“微信”输成了“为信”,但是搜索引擎返回的结果纠正为“微信”的搜索结果,如图1-1。另外比如“北京大学校长”和“北大校长”,“北京故宫博物院”和“北京故宫”都是指的同一个人或事物。 上述问题,可以利用两个词或短语的编辑距离大小来解决。 图1-1 搜索词“为信”的百度结果 编辑距...

给我一点温度 1万+

【2025年华为秋招(AI)-11月19日-第二题(200分)- 终端款型聚类识别】(题目+思路+Java&C++&Python解析+在线测试)

该摘要总结了题目要求、输入输出格式、KMeans算法的实现步骤以及关键点。以下是150字内的摘要: 本文提出基于KMeans算法对终端型号进行聚类的方法。通过包间隔时长、连接持续时长、漫游前后信号强度4个特征,使用欧氏距离度量相似度。算法采用固定初始化策略(前k个样本作为初始质心),经过分配-更新迭代,直至质心移动小于1e-8或达到最大迭代次数。最终输出各簇样本数并按升序排列,解决了终端型号自动分类问题。示例显示该方法能有效识别3-4类终端,并准确统计每类数量。

m0_73659489的博客 141

编辑距离(Edit Distance)

动态规划计算编辑距离

颹蕭蕭 4109

Qt/C++编写自定义控件49-飞机仪表盘

一、前言 飞行仪表是测定和表示飞机数据的工具,飞机中必不可少的一部分,飞行员根据飞行仪表表示的数据才能正确地做出判断。一般飞机仪表包括高度表+空速表+垂直速率表+姿态仪+航向指示表+转弯协调表。 这次要绘制的是其中的姿势仪,显示飞机相对于地平线的姿态,看姿态仪,飞行员能判断飞机姿态为偏左偏右,及偏上和偏下。姿态仪作用原理为一高度旋转的陀螺,不论飞机的姿态如何变化,此陀螺的定轴性在空间保持相同,因而...

Qt/C++视频监控/推流/物联网/大屏系统/自定义控件/UI定制/输入法 7025

七天征服AutoSAR/SomeIP_01速成配置并代码生成

本文为AutoSAR中SomeIP配置开发的实操指南摘要,重点介绍通过通信矩阵快速构建SomeIP工程的方法。核心内容包括:1)基于Excel通信矩阵生成系统描述文件(arxml);2)在AutoSAR工具中导入文件自动生成协议栈配置,涵盖ETHIF、SoAd等模块;3)关键报错处理(COM/PDUR/SOAD/SD模块的配置修正);4)SomeIPXF的数据编解码配置;5)SWC组件与RTE任务映射。教程强调"先完成再完美"的实践原则,指导开发者快速生成基础代码框架,为后续协议调试奠定

大叔带刺的博客 307

Edit Distance(编辑距离)算法。计算两个字符串的相似程度。

最近需要做两个字符串的相似度比较,涉及到了这个算法,于是

怀文_张 2060

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

上一篇: eclipse如何正确部署tomcat7
下一篇:  native2ascii 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值