编辑距离算法(Levenshtein Distance Algorithm)的概念理解及其应用

文本相似性计算之编辑距离详解 文本相似性计算之编辑距离详解 概述: 编辑距离(Edit Distance):是一个度量两个字符序列之间差异的字符串度量标准,两个单词之间的编辑距离是将一个单词转换为另一个单词所需的单字符编辑(插入、删除或替换)的最小数量。一般来说,编辑距离越小,两个串的相似度越大。 编辑距离是1965年由苏联数学家Vladimir Levenshtein发明的。Levenshtein Distance也被称为编辑距离(Edit Distance)。 一、Levenshtein.distance(str1, str2); 阅读详情

概念:

编辑距离,由俄罗斯科学家Vladimir Levenshtein于1965年提出,因此又称为Levenshtein Distance,简称LD,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。

可用的编辑操作包括:
- 将某个字符替换为另一个字符
- 插入字符
- 删除字符

Levenshtein Distance公式定义:

将两个字符串 a, b 的Levenshtein Distance表示为LDa,b(|a|, |b|),如下公式所示。其中,|a|和 |b|分别对应字符串 a, b 的长度。
在这里插入图片描述
LDa,b(|a|, |b|)表示 a 的前 i 个字符与 b 的前 j 个字符之间的编辑距离。其中,i 和 j 都是从1开始的下标。

示例一(不等长字符串):

将字符串Kitten转换成字符串Sitting

1. Kitten —> Sitten(K —> S)
2. Sitten —> Sittin (e —> i)
3. Sittin —> Sitting (在末尾插入字符‘g’)

将Kitten转换成Sitting的LD值为3。

示例二(等长字符串):

将字符串hello转换成字符串kitty

1. hello —> kello(h —> k)
2. kello —> killo(e —> i)
3. killo —> kitlo(l —> t)
4. kitlo —> kitto(l —> t)
5. kitto —> kitty(o —> y)

将hello转换成Sitting的LD值为5。

代码实现:

def edit_distance(a, b):
    m, n = len(a), len(b)
    if m == 0:
        return n
    if n == 0:
        return m
    dp = [[0] * (n + 1) for _ in range(m + 1)]
    for i in range(m + 1):
        dp[i][0] = i
    for j in range(n + 1):
        dp[0][j] = j
    for i in range(1, m + 1):
        for j in range(1, n + 1):
            dp[i][j] = min(dp[i - 1][j] + 1, dp[i][j - 1] + 1, dp[i - 1][j - 1] + (s1[i - 1] != s2[j - 1]))
    # print(dp)
    return dp[m][n], 1 - dp[m][n] / m

Levenshtein Distance的使用场景:

- DNA分析;
- 拼写检查;
- 语音识别;
- 抄袭侦测;
- 搜索引擎;
……

总结:

编辑距离是NLP领域中一个基本的评估文本相似度的算法,可以作为文本相似任务的重要特征之一。该算法的缺点在于,它是基于文本自身的结构去计算的,并没有利用到文本语义层面的信息。

编辑距离(Edit Distance) 文章目录编辑距离的定义编辑距离的应用动态规划法求解编辑距离 编辑距离的定义 编辑距离(Edit Distance)是针对两个个字符串S1和S2的差异程度进行量化,计算方式是看至少需要多少次的处理才能将S1变成S2(和S2变成S1是等价的),用 EditDis(S1,S2)表示。 其中处理的方式有三种: 1.插入一个字符 2.删除一个字符 3.替换一个字符 这是严格意义上的距离,满足”距离三公理":... 阅读详情

相关推荐

Porter、Snowball与Lancaster词干提取算法选型指南

词干提取是文本预处理的基础环节,本质是通过规则化后缀剥离实现词汇归一化,其核心原理在于平衡压缩率、准确率与语言适配性。Porter算法以保守规则保障低误伤,Snowball作为其工程化演进支持多语言与跨平台一致性,Lancaster则以迭代式激进截断换取极致压缩效率。三者并非性能优劣之分,而是面向不同技术价值取舍:高可靠性场景(如医疗、法律)需Porter的可解释性,大规模检索或资源受限系统适合Lancaster的轻量高效,而中长期可维护的多语言项目应首选Snowball。本文聚焦英语NLP实践,深入解析三

ainixi7099的博客 455

详解编辑距离算法-Levenshtein Distance

目录 •写在前面 •什么是编辑距离? •思路 •思路可视化 •代码实现 •写在前面 编辑距离算法被数据科学家广泛应用,是用作机器翻译和语音识别评价标准的基本算法。最简单的方法是检查所有可能的编辑序列,从中找出最短的一条。但这个序列总数可能达到指数级,但完全不需要这么多,因为我们只要找到距离最短的那条而不是所有可能的序列。这个概念是由俄罗斯科学家Vladimir Levenshtein...

BoCong-Deng的博客 3万+

Scikit-learn KNN实战手册:从参数调优到线上部署

K最近邻(KNN)是一种基于实例的懒惰学习算法,其核心原理是通过距离度量寻找相似样本并聚合邻居输出。技术价值在于零训练开销、天然可解释性与任务泛化能力(支持分类/回归/多输出),但实际落地受制于维度灾难、距离函数合理性与索引效率。典型应用场景包括电商商品推荐、金融风控逾期预测、IoT设备故障预警及医疗亚健康识别——这些场景共同指向对业务语义距离建模、K值业务敏感度校准、ball_tree与brute算法选型等关键实践需求。本文聚焦Scikit-learn中KNN在真实生产环境中的参数深度解析、自定义距离函数

xpmwgcwm的博客 397

编辑距离算法详解:Levenshtein Distance算法

算法基本原理:假设我们可以使用d[ i , j ]个步骤(可以使用一个二维数组保存这个值),表示将串s[ 1…i ] 转换为 串t [ 1…j ]所需要的最少步骤个数,那么,在最基本的情况下,即在i等于0时,也就是说串s为空,那么对应的d[0,j] 就是 增加j个字符,使得s转化为t,在j等于0时,也就是说串t为空,那么对应的d[i,0] 就是 减少 i个字符,使得s转化为t。 然后我们...

weixin_30909575的博客 1999

TensorFlow手写单词识别:CNN+BiLSTM+CTC实战指南

手写单词识别是OCR落地的关键挑战,本质是图像理解、序列建模与语言约束的协同任务。其核心原理在于解决输入图像长度固定与输出字符序列长度可变之间的对齐难题,CTC(Connectionist Temporal Classification)损失函数为此提供了端到端的解决方案。相比单字符分类,该技术具备更强的真实场景鲁棒性,能应对倾斜、粘连、涂改等干扰,在医疗处方、教育笔记等轻量级文档数字化中具有明确工程价值。本文聚焦TensorFlow生态下的CNN+BiLSTM+CTC技术栈,覆盖数据构建、预处理矫正、模型

hqmln的博客 552

【信息科学与工程学】【审计学】第一篇 招投标领域审计算法01

在每个关键流程节点(如文件上传、开标唱标、评标结束), 计算该环节所有电子文件的数字指纹(如SHA-256哈希值), 并将指纹和元数据(时间、操作人)上链存证。:从发票、合同中提取材料品名、规格、采购价、时间、地点。:对每个供应商, 提取其在历史投标中的行为序列特征, 如:中标率、与特定伙伴同时投标率、自身高报价次数、在伙伴中标项目中的“弃标”或“无效标”次数。:监控开标、评标现场音视频, 识别异常情绪(激烈争吵)、敏感关键词(“打点”、“关照”)、异常物品传递、私下交流等违规行为。

weixin_49199313的博客 816

编辑距离(Levenshtein距离)数学角度的理解

编辑距离,又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括:将一个字符替换成另一个字符,插入一个字符,删除一个字符。(注意这里的理解就是“最少”两个字,意思就是在所有能达到同样效果的操作次数中选最小的那个,后边的公式也是如此理解)例子编辑距离计算Levenshtein距离indexbeautyindex0123456b1012345a21...

桔梗的眼泪博客 917

【信息科学与工程学】计算机科学与自动化——第三百零五篇 计算机系统中的各类运算操作01

编号类型领域运算操作运算类型算法算法的详细设计及数学分析参数列表及参数的数值设计应用场景 (100+条)集合运算​1集合运算关系代数并集 (Union)集合运算归并排序去重合并两个集合,去除重复元素。时间复杂度 O(n+m),n,m为两集合大小。输入:集合A, B。输出:A∪B。数据集成、多表结果合并、去重后的全量数据提取。2集合运算关系代数交集 (Intersection)集合运算哈希交集找出同时属于两个集合的元素。平均时间复杂度 O(min(n,m)),最坏 O(n*m)。输入:集合A, B。输出:A∩

weixin_49199313的博客 1389

高效字符串相似度计算:python-Levenshtein的进阶应用与性能优化

python-Levenshtein是一个基于C语言扩展的高性能Python模块,专门用于快速计算字符串之间的编辑距离和相似度。该项目通过原生C实现提供了比纯Python实现快10-100倍的性能优势,支持普通字符串和Unicode字符串,广泛应用于文本处理、拼写检查、DNA序列分析等多个领域。作为GitHub加速计划的一部分,该项目为开发者提供了稳定可靠的字符串相似度计算解决方案。 ## 场景

gitblog_00080的博客 606

【信息科学与工程学】【数据科学】 第四十四篇 数据湖 系列二 函数库01

2. 近似最近邻搜索(ANN): 通过HNSW等图索引模型加速,模型定义为构建一个层次化导航小世界图。依赖于消息队列(Kafka/Pulsar)、分布式文件系统(HDFS/S3)的客户端及连接库。依赖专门的向量检索库(如FAISS, Milvus)。管控目标: 召回率(Recall@K) > 95%,查询延迟 < 100ms。管控目标: < 1% (核心业务字段) 或 < 5% (一般字段)依赖数据处理框架(如Spark, Pandas)的核心统计函数。,通过牺牲精确性(ANN)来换取搜索速度的大幅提升。

weixin_49199313的博客 346

《大明王朝1566》中,朝廷财政危机无法解决的根源分析

财政困局中的财富最终流向三重黑洞:​皇室挥霍​(如嘉靖炼丹修殿)、特权阶层贪腐​(严党年入百万两盐税)、制度性损耗​(宗室供养、低效官僚)。更深层的“钱”其实是被禁锢在道德化治理的牢笼中——当国家用“黄河长江皆可为用”的权术思维替代制度性改革时,财政危机便成为帝制王朝无法逃脱的宿命。

为了小家奋斗 1973

为什么选择python-Levenshtein?字符串相似度计算的终极解决方案

在文本处理、数据清洗和自然语言处理中,字符串相似度计算是一个基础但关键的任务。python-Levenshtein作为一个高效的Python C扩展模块,为开发者提供了快速计算编辑距离和字符串相似度的强大工具。本文将深入探讨这个库的核心优势、实战应用和性能表现,帮助你在项目中做出明智的技术选择。 ## 核心功能矩阵:全面对比主要字符串处理方案 | 功能特性 | python-Levenshte

gitblog_00769的博客 360

TLV320AIC3204音频CODEC硬件设计与调试实战

本文深入解析了TLV320AIC3204音频CODEC的硬件设计与调试实战。文章从芯片功能定位入手,详细阐述了电源时钟设计、模拟输入电路等关键硬件设计要点,并提供了软件驱动配置与分层调试方法,帮助工程师有效规避常见陷阱,解决底噪、失真等典型音频调试问题。

zero1的博客 1128

浏览器端字符串算法平台:Pyodide与Web Worker的工程实践

字符串算法家族在文本处理与生物信息等领域广泛应用,编辑距离、最长公共子序列、序列对齐等为文本比较提供了基础度量方式。在网页端运行这些算法,往往面临Python环境依赖和计算性能挑战。通过WebAssembly技术,Pyodide将CPython编译到浏览器内,使复用成熟的Python算法库成为可能。结合Web Worker承载后台计算,可避免阻塞主线程,保持页面流畅。设计统一的消息协议与JSON边界,实现算法调用与结果可视化。针对大矩阵输入,通过输入规模限制、Service Worker缓存、toJs转换等

weixin_30587927的博客 641

Profinet从站开发初体验:用p-net开源库和树莓派快速搭建一个IO设备模拟器

本文详细介绍了如何使用p-net开源库和树莓派快速搭建Profinet从站IO设备模拟器。从开发环境准备、p-net源码编译到设备模拟器功能实现,提供了全流程实战指南,帮助开发者快速掌握工业通信协议开发技巧,适用于工业自动化领域的设备互联测试与验证。

weixin_30384217的博客 383

用Logisim搞定华科计组实验:单总线CPU设计从微程序到硬布线的保姆级通关攻略

本文详细介绍了如何使用Logisim完成华中科技大学计算机组成原理实验中的单总线CPU设计,涵盖从微程序控制器到硬布线控制器的完整实现过程。通过MIPS指令译码器设计、微程序控制原理、状态机实现等关键步骤的保姆级教程,帮助学生掌握CPU设计的核心技能,并提供Educoder平台提交与调试的实用技巧。

weixin_30897233的博客 476

AutoScraper模糊匹配深度解析:text_fuzz_ratio参数实战与架构设计

在现代Web数据抓取实践中,开发者常常面临一个核心挑战:网页内容的动态变化与数据格式的不确定性。传统爬虫依赖精确的CSS选择器或XPath路径,一旦目标页面结构微调或文本内容稍有差异,整个抓取流程就会失效。这种脆弱性迫使开发者投入大量精力维护爬虫规则,而非专注于数据价值挖掘。AutoScraper项目通过智能模糊匹配机制,为解决这一痛点提供了创新方案。 ## 模糊匹配的三层架构解析 AutoS

gitblog_01013的博客 346

华为OD 面试手撕代码真题【判断链表是否有环】

华为OD 面试手撕代码真题【判断链表是否有环】

MISAYAONE的博客 7238

模糊连接实战:字符串相似度匹配与工业级数据关联技术

模糊连接(Fuzzy Join)是一种基于字符串相似度的数据关联技术,核心原理是通过编辑距离、音码、n-gram集合相似性等算法量化字段间的‘近似相等’关系,而非依赖严格等值匹配。其技术价值在于 bridging 数据质量缺陷与业务实体一致性需求之间的鸿沟,支撑用户去重、主数据治理、跨源身份识别等关键场景。在电商、金融、医疗等领域,它直接决定客户画像准确率、反洗钱召回率和监管报送合规性。本文聚焦 Fuzzy Joins 的工程落地,涵盖预处理标准化、多算法协同打分(如 Jaro-Winkler、Jaccar

xpmwgcwm的博客 469

PCL 计算点云包围球【2025最新版】

包围球通常用于简单排斥,因为与球体相交的方程很简单,同样重要的是,旋转一个球体并不会改变其范围。因此,当包围球用于简单排斥时,如果球体中心是对象的原点,则可以忽略对象的方向。

点云侠的博客 2068

【系统架构设计师】预测试卷一:综合知识(75道选择题)

软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式,架构风格反映领域中众多系统所共有的结构和 (48),强调对架构(49)的重用。 (48) A. 语义特性 B. 功能需求 C. 质量属性 D. 业务规则 (49) A. 分析 B. 设计 C.实现

数据知道的博客 7766

NLP词形还原实战:Stemming与Lemmatization工程选型指南

词形还原是自然语言处理中文本预处理的核心环节,涉及词干提取(Stemming)和词形还原(Lemmatization)两大技术路径。其本质并非简单字符串变换,而是对语义保真度、计算效率与领域适配性的系统权衡。Stemming基于规则快速截断后缀,适合高吞吐、低延迟场景;Lemmatization依赖词性标注与权威词典,保障语义准确性,但面临未登录词与性能瓶颈。在电商搜索、金融研报、医疗文本等真实任务中,二者常需混合使用,并结合领域词典、POS优化、缓存策略与线程安全设计。本文聚焦Data Science落地

weixin_34167819的博客 332

泛微表单添加自定义按钮

泛微表单添加自定义按钮

技术分享 2191

贝叶斯优化调参KNN分类模型:原理、实战与高级技巧

在机器学习模型开发中,超参数优化是提升模型性能的关键环节。其核心原理是通过系统性的搜索策略,寻找使模型在验证集上表现最佳的超参数组合,从而在偏差与方差之间取得平衡,提升模型的泛化能力。传统方法如网格搜索计算成本高昂,随机搜索则缺乏方向性。贝叶斯优化作为一种更智能的优化策略,通过构建目标函数的概率代理模型(如高斯过程)和利用采集函数(如期望提升EI)来指导搜索,能够以更少的评估次数找到更优解,其技术价值在于显著提升了调参效率与资源利用率。这一技术尤其适用于评估速度相对较快但参数空间需要细致搜索的模型,例如K最

weixin_33957648的博客 531

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Darcula跨境钓鱼攻击深度解析与平台级主动防御体系构建

网络钓鱼(Phishing)是一种利用社会工程学和技术手段,伪装成可信实体以窃取敏感信息的网络攻击。其核心原理在于通过伪造的通信(如短信、邮件)和网站,诱导用户在不知情的情况下泄露凭证、财务信息等。在数字化时代,钓鱼攻击的技术价值在于其极低的攻击门槛和极高的潜在回报,催生了网络钓鱼即服务(PaaS)等黑产模式,对金融、电商等行业构成严重威胁。应用场景广泛,从仿冒银行登录到快递诈骗,攻击链条涉及目标配置、基础设施部署、短信群发与数据收集。本文聚焦于Darcula这一先进的跨境钓鱼即服务(PaaS)套件,深入拆

weixin_34218890的博客 916

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

AI驱动的临床评价数据筛选框架:构建可追溯、可验证、合规的数据证据链

临床评价报告(CER)的核心挑战并非数据匮乏,而是数据与监管要求之间的结构性错配——涉及质量、结构、语义及合规性四重维度。其底层逻辑在于将模糊的临床问题(如PICO要素)精准映射为可执行的数据需求,并通过知识图谱实现医学概念归一化,结合数据指纹技术完成多源异构系统的语义对齐与健康评估。该方法显著提升数据代表性、终点完整性与偏倚控制能力,已在骨科AI影像、糖尿病视网膜病变筛查等真实CER场景中验证有效性,支撑NMPA/CE申报中的‘数据为什么被选/被排除’可审计诉求。

weixin_30652897的博客 412

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

上一篇: 歪打正着解决 ModuleNotFoundError: No module named ‘setuptools.command.build‘ 问题
下一篇: 一条命令帮助 pip 实现批量下载项目的requirements
123我是木头人
博客等级 码龄9年 67粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

123我是木头人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值