热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

编辑距离python递归,自然语言处理解决编辑距离问题的动态程序设计(Python),规划,思想,python...

最近在看自然语言处理的课,本来只想看看。但是一动手,才发现,呵呵呵?我都是自学,所以底子不太好,理解东西比较慢

最近在看自然语言处理的课,本来只想看看。但是一动手,才发现,呵呵呵?

我都是自学,所以底子不太好,理解东西比较慢。这动态规划处理编辑距离的问题就让我烦扰了好久。忧桑。

好在我才看完《算法图解》,里面有说道动态规划的问题,而且比较容易懂。

动态规划的问题都要涉及到表格,《算法图解》中的动态规划的问题是处理两个单词之间的相似度,而编辑距离涉及到替换、删除、增加,两个的表格设计不同,然后就是。。。我迷糊了

当然我现在弄清楚了一些。两个单词之间的相似度是基于表格周围最大值而变化,而编辑距离是基于周围最小值而变化

str1 = ‘altrui’,str2 = ‘algor’

len(str1) = 6,len(str2) = 5

这时我们需要一个 7 * 6的表格(除去表示字符的行列),为dp

7aad37713b8ed1ddf6e4536872fe86d6.png

可以这么想!

①现在我们先来到dp[0][0],这个时候,我们没有任何字符,所以不需要任何改变

②来到dp[0][1],这个时候我们str1出现了第一个字符,然后我们str2依然没有字符。那str2如何变成此时的str1呢,就是添加一个,所以dp[0][1] = 1

③来到dp[0][2],这个时候str2出现了第二个字符,然而str2依然没有出现可以使用的字符,所以str2要变成此时的str1,就要添加两个字符,所以dp[0][2] = 2。这一行以此类推。

④来到dp[1][0],在这个地方,str2有一个字符,str1没有提供字符,所以str2变成str1要删除一个字符。到dp[1][1],str1提供A啦,此时两者都不需要改变。所以为0。

⑤dp[1][2],此时str1又给我一个字符L,那此时的str2‘A’变成str1‘AL’,则要删去一个字符,操作为1。dp[1][3],此时str1‘ALT’,str2‘A’,在之前删除的基础上我们又要删除一个,所以为2(你也可以直接从A考虑,要删除两个)。以此类推。。。

理解动态规划关键是要自己动手把表格画画,不能光靠公式,只会敲代码是不行的,那就相当于在背代码

(其实是和自己说,小声哔哔)

python实现代码如下

def edit_dis(str1, str2):

m,n = len(str1),len(str2)

dp = [[0 for x in range(n+1)] for x in range(m+1)]

# 生成一个含有m+1个列表,每个列表又包含n+1个0的二维列表(当然也可以用numpy.zeros()来生成)

for i in range(m+1):

for j in range(n+1):

if i == 0:

dp[i][j] = j

elif j == 0:

dp[i][j] = i

elif str1[i-1] == str2[j-1]:

dp[i][j] = dp[i-1][j-1]

else:

dp[i][j] = min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1]) + 1

return dp[m][n]

还有一个递归版本

def edit_dist(str1, str2):

if len(str1) == 0:

return len(str2)

elif len(str2) == 0:

return len(str1)

elif str1 == str2:

return 0

if str1[len(str1)-1] == str2[len(str2)-1]:

d = 0

else:

d = 1

return min(edit_dist(str1, str2[:-1]) + 1,

edit_dist(str1[:-1], str2) + 1,

edit_dist[:-1], str2[:-1]) + d)



推荐阅读
  • 前言4.1回到基础赋值(略)barfoo[:]copy.deepcopy()等式(略)is条件语句ifelifall()any()4.2序列字符串链表元组序列类型上的操作表4-1P ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
  • 【跨越鸿沟】学术界与工业界的GAP有多大?
    来自:美团技术团队2020年7月31日,由中国图象图形学学会主办、视觉大数据专委会承办,北京智源人工智能研究院和美团协办的ECCV2020 ... [详细]
  • 图灵测试是什么?为什么AlphaGo那么牛却过不了?
    导读:本文将介绍人工智能的检测手段——图灵测试。作者:杜振东涂铭来源:大数据DT(ID:hzdashuju&# ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • EzPP 0.2发布,新增YAML布局渲染功能
    EzPP发布了0.2.1版本,新增了YAML布局渲染功能,可以将YAML文件渲染为图片,并且可以复用YAML作为模版,通过传递不同参数生成不同的图片。这个功能可以用于绘制Logo、封面或其他图片,让用户不需要安装或卸载Photoshop。文章还提供了一个入门例子,介绍了使用ezpp的基本渲染方法,以及如何使用canvas、text类元素、自定义字体等。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • 深度学习与神经网络——邱锡鹏
    深度学习与神经网络——邱锡鹏-一、绪论人工智能的一个子领域神经网络:一种以(人工))神经元为基本单元的模型深度学习:一类机器学习问题,主要解决贡献度分配问题知识结构:路线图:顶 ... [详细]
  • 【历史上的今天】1 月 8 日:谷歌推出 Google Pay;Quibi 的重生;平衡二叉树的发明者出生
    整理|王启隆透过「历史上的今天」,从过去看未来,从现在亦可以改变未来。今天是2022年1月8日,在1942年的今天,英国理论物理学家霍金(StephenHawking)出生;霍金在 ... [详细]
  • 必备核心算法神经网络通俗讲解
    深度学习传统算法VS人工智能算法传统算法:都是人为去计算人工智能算法:部分人为需要做的事情交由机器去做【把更多的问题简单化】IT的发展比较高端的就是A ... [详细]
  • 聊聊 中国人工智能科技产业 区域竞争力分析及趋势
    原文链接:聊聊中国人工智能科技产业区域竞争力分析及趋势最近看了一个关于国内AI的报告《中国新一代人工智能科技产业区域竞争力评价指数(2021ÿ ... [详细]
  • 作为机器学习最重要的一个分支,近年来深度学习(DeepLearning)发展势头迅猛,借助庞大的数据 ... [详细]
author-avatar
518094haha
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有