Speech and Language Processing-之最小化编辑距离

news2024/9/20 8:07:24

今天讲编辑距离。

编辑距离为我们提供了一种量化这两种关于字符串相似度的直觉的方法。更正式地说,两个字符串之间的最小编辑距离定义为将一个字符串转换为另一个字符串所需的最小编辑操作(插入、删除、替换等操作)数量。

       如上,图中第一行字符串和第二行字符串分别是对比的两串,两行字符串中间的竖线表示的是这两串字符挨个字符进行对比并对齐,对齐的过程中肯定有字符不一样的,那这个时候,第三行字符表示该字符对比后是需要删除(d)还是替换(s)还是插入(i)。
       我们如何找到最小编辑距离?我们可以把它看作一个搜索任务,在这个任务中,我们正在搜索从一个字符串到另一个字符串的最短路径——一个编辑序列。

       所有可能的编辑空间是巨大的,所以我们不能天真地搜索。然而,许多不同的编辑路径最终会处于相同的状态(字符串),所以我们可以只记住每次看到状态的最短路径,而不是推荐所有这些路径。我们可以通过使用动态规划来做到这一点。动态规划是一类算法的名称,首先由Bellman(1957)提出,它应用表驱动方法通过组合子问题的解来解决问题。自然语言处理中一些最常用的算法利用了动态规划,例如Viterbi算法(第8章)和CKY算法(第13章)。

 

最小编辑距离(Levenshtein Distance)是指将一个字符串转换成另一个字符串所需的最少操作次数。这里的操作包括:插入一个字符、删除一个字符、替换一个字符。

下面是对应的Java代码:

public class EditDistance {
    public static int minDistance(String word1, String word2) {
        int n = word1.length();
        int m = word2.length();
        
        // 定义状态数组dp[i][j]为word1[0:i-1]和word2[0:j-1]之间的编辑距离
        int[][] dp = new int[n+1][m+1];
        
        // 初始化数组
        for (int i = 0; i <= n; i++) {
            dp[i][0] = i;
        }
        for (int j = 0; j <= m; j++) {
            dp[0][j] = j;
        }
        
        // 动态规划求解
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                if (word1.charAt(i-1) == word2.charAt(j-1)) {
                    dp[i][j] = dp[i-1][j-1];
                } else {
                    dp[i][j] = Math.min(dp[i-1][j], Math.min(dp[i][j-1], dp[i-1][j-1])) + 1;
                }
            }
        }
        
        return dp[n][m];
    }
    
    public static void main(String[] args) {
        String word1 = "kitten";
        String word2 = "sitting";
        int distance = minDistance(word1, word2);
        System.out.println(distance);  // 输出结果为3
    }
}

在上面的代码中,我们使用了一个二维数组 dp 来记录状态。其中,dp[i][j] 表示将字符串 word1 的前 i 个字符转换成字符串 word2 的前 j 个字符所需的最小编辑距离。

首先,我们初始化 dp 数组的第一行和第一列,分别表示将空串转换成 word1word2 所需的距离。

然后,我们利用动态规划的思想,从左到右、从上到下地遍历 dp 数组,根据当前字符是否相同来更新 dp[i][j] 的值。如果相同,则不需要进行任何操作,直接继承上一个状态的编辑距离;否则,我们可以进行三种操作中的一种(插入、删除、替换),取这三种操作中编辑距离最小的那个值加 1,作为当前状态的编辑距离。

最后,返回 dp[n][m] 就是将 word1 转换成 word2 所需的最小编辑距离。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/466787.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java-代码生成器的实现

文章目录 前言一、概述二、手写代码1. 简要说明2. 代码编写3. 完整代码4. 测试效果 三、项目源码 前言 最近看了一个开源的项目&#xff0c;jfinal-layui&#xff0c;然后这个项目里面有一个 代码生成器 的功能 之前虽然有用过代码生成器&#xff0c;但是从来没有看过相关的源…

【react从入门到精通】react入门这一篇就够了

文章目录 前言什么是 React&#xff1f;安装和配置 React创建 React 组件渲染 React 组件使用 JSX传递属性&#xff08;Props&#xff09;处理组件状态&#xff08;State&#xff09;处理用户输入&#xff08;事件处理&#xff09;组合和嵌套组件写在最后 前言 React 是一种由 …

一些技术管理常见问题笔记

空降管理&#xff1a; 1 真诚靠谱&#xff1a; 思考我们能给上级、下级、公司带来什么价值。 遇到冲突&#xff0c;怎么决策&#xff1f; 团队、合作方了解清楚。 团队同学的简历&#xff0c;工作情况&#xff0c;背景能力有了解。 对应的产品经理、业务方的思维、背景。…

改善电商实时聊天体验的 5 大方法

今天&#xff0c;大多数网站都提供实时聊天支持作为选项。这是因为客户压倒性地将实时聊天列为他们的首选联系方式。 高达86%的消费者愿意在更好的客户体验上花费更多&#xff0c;但只有1%的人的期望始终得到满足&#xff0c;对于能够正确进行实时聊天的品牌来说&#xff0c;这…

润滑剂产业互联网平台搭建

润滑剂是一种广泛应用于工业、交通运输和农业等领域的重要物质&#xff0c;而润滑剂产业互联网平台的搭建可以更好地满足企业和用户的需求&#xff0c;提高行业效率&#xff0c;提升企业竞争力。下面是润滑剂产业互联网平台搭建的一些步骤和关键考虑因素&#xff1a; 确定平台的…

在KylinV10安装Dm8

前言 因为近期&#xff0c;业外和几个朋友想搞点有趣的项目玩玩&#xff0c;既然不以盈利为主&#xff0c;就> 主推国产化&#xff0c;所以这篇记录一下&#xff0c;我在KylinV10安装dm8.最近真的很忙&#xff0c;要负责专研一下国产化工具开发的事&#xff0c;还要负责tb级…

大数据之Hadoop集群资源管理器YARN

目录&#xff1a; 一、hadoop yarn 简介二、YARN架构三、YARN工作原理简述 一、hadoop yarn 简介 Apache YARN (Yet Another Resource Negotiator) 是 hadoop 2.0 引入的集群资源管理系统。用户可以将各种服务框架部署在 YARN 上&#xff0c;由 YARN 进行统一地管理和资源分配…

如何助力工厂实现从反应性维护到预测性维护?

技术正在重塑企业日常运营方式。技术的发展和变革促使工厂采用预测性维护&#xff0c;而不再采用被动&#xff08;直到故障发生后再进行修理&#xff09;的维护策略。 预测性维护利用多参数持续监测设备的健康状况和性能&#xff0c;通过预先建立的算法来预测设备何时会出现故障…

聚观早报|特斯拉向第三方电动车开放充电桩;Epic 诉苹果垄断败诉

今日要闻&#xff1a;特斯拉向第三方电动车开放充电桩&#xff1b;我国全面实现不动产统一登记&#xff1b;Epic 诉苹果垄断败诉&#xff1b;腾讯大股东Naspers再减持近79万股&#xff1b;星巴克中国门店将超过万家 特斯拉向第三方电动车开放充电桩 近日&#xff0c;特斯拉官方…

Django智能旅游推荐系统

背景 随着科学技术发展&#xff0c;电脑已成为人们生活中必不可少的生活办公工具&#xff0c;在这样的背景下&#xff0c;网络技术被应用到各个方面&#xff0c;为了提高办公生活效率&#xff0c;网络信息技术飞速发展。在这样的背景下人类社会进入了全新的信息化的时代。智能…

一篇文章搞懂OpenCV之图像特征

文章目录 一篇文章搞懂OpenCV之图像特征纹理特征形状特征哈里斯角检测Shi-Tomasi角点检测尺度不变特征变换算法 一篇文章搞懂OpenCV之图像特征 图像特征即图像中独特的&#xff0c;易于跟踪和比较的特定模板或特定结构&#xff0c;例如我们肉眼可见的颜色、形状、轮廓以及亮度…

线性结构的存储类型

线性结构的存储类型 顺序标&#xff1a;顺序标就是数组&#xff0c;也成为向量vector、高维向量及称为张量即tensor 链表&#xff1a;单链表、双链表、循环链表 线性表概念 表目、文件、索引、表的长度、空表 线性表由节点表和关系表组成二元组&#xff1b; 节点集由有限的…

微服务---微服务保护Sentinel基本使用

微服务保护 1.初识Sentinel 1.1.雪崩问题及解决方案 1.1.1.雪崩问题 微服务中&#xff0c;服务间调用关系错综复杂&#xff0c;一个微服务往往依赖于多个其它微服务。 如图&#xff0c;如果服务提供者I发生了故障&#xff0c;当前的应用的部分业务因为依赖于服务I&#xff…

计算机网路常见面试题(上)

计算机网络基础 # 网络分层模型 # OSI 七层模型是什么&#xff1f;每一层的作用是什么&#xff1f; OSI 七层模型 是国际标准化组织提出一个网络分层模型&#xff0c;其大体结构以及每一层提供的功能如下图所示&#xff1a; 每一层都专注做一件事情&#xff0c;并且每一层都…

SQL注入漏洞学习简记

SQL注入漏洞危害 id1 and 1 1-- id1 and 1 2-- id1 and 1 1-- id1 and 1 2-- 可以用来判断是字符型注入/数字型注入 id1 order by 3 -- id1 order by 4 -- 这些SQL注入语句中的 order by 子句用于对结果进行排序&#xff0c;而排序的字段编号是从 1 开始的。如果在 orde…

【论文导读】Causality Inspired Representation Learning for Domain Generalization

Causality Inspired Representation Learning for Domain Generalization 阅读笔记_1100dp的博客-CSDN博客Causality Inspired Representation Learning for Domain Generalization 阅读笔记https://blog.csdn.net/qq_44901656/article/details/127341310这一篇讲的不错&#x…

业内常用即时传输网盘

工具名称 业内常用即时传输网盘 功能简介 无需登录&#xff0c;短时间内有效&#xff0c;多用于传输小型敏感文件 外部链接 请见文内 内部网盘链接 在线站点&#xff0c;无网盘链接 使用说明 许多安全行内人士在团队内互传敏感文件时&#xff0c;为实现上传和下载文件…

【Hugging Face】Hugging Face 主要类和函数介绍

Hugging Face 主要类和函数介绍 Hugging face是什么&#xff1f;什么是自然语言处理&#xff1f;PipelineDatasetPipeline on GPUMetricsAutoClasses在本地保存和加载模型结论参考资料 本文旨在为初学者介绍Hugging Face的主要类和函数&#xff0c;包括Pipeline, Datasets, Met…

Python小姿势 - Python学习笔记:如何使用Python创建一个简单的计算器

Python学习笔记&#xff1a;如何使用Python创建一个简单的计算器 在本教程中&#xff0c;我们将学习如何使用Python创建一个简单的计算器。我们将学习如何使用Python的内置函数input()和print()&#xff0c;以及如何使用Python的运算符来完成这个项目。 首先&#xff0c;让我们…

HBase(1):简介

1 Hadoop 从 1970 年开始&#xff0c;大多数的公司数据存储和维护使用的是关系型数据库大数据技术出现后&#xff0c;很多拥有海量数据的公司开始选择像Hadoop的方式来存储海量数据Hadoop使用分布式文件系统HDFS来存储海量数据&#xff0c;并使用 MapReduce 来处理。Hadoop擅长…