文本字面相似度算法-程序员宅基地

技术标签: 算法  动态规划  p2p  

# 编辑距离
def edit_distance(word1, word2):
    len1 = len(word1)
    len2 = len(word2)
    dp = np.zeros((len1 + 1,len2 + 1))
    for i in range(len1 + 1):
        dp[i][0] = i    
    for j in range(len2 + 1):
        dp[0][j] = j
     
    for i in range(1, len1 + 1):
        for j in range(1, len2 + 1):
            delta = 0 if word1[i-1] == word2[j-1] else 1
            dp[i][j] = min(dp[i - 1][j - 1] + delta, min(dp[i-1][j] + 1, dp[i][j - 1] + 1))
    
    return dp[len1][len2]
# 全局序列对齐 Needleman-Wunsch
def globalAlignment(str1, str2):
    m = len(str1)
    n = len(str2)
    f = [[0 for _ in range(n + 1)] for _ in range(m + 1)]
    for i in range(m + 1):
        for j in range(n + 1):
            if i == 0 and j == 0:
                pass
            elif i == 0:
                f[i][j] = f[i][j - 1] - 2
            elif j == 0:
                f[i][j] = f[i - 1][j] - 2
            else:
                temp = 1 if str1[i - 1] == str2[j - 1] else -1
                f[i][j] = max(f[i - 1][j] - 2, f[i][j - 1] - 2, f[i - 1][j - 1] + temp)
    return f[m][n] 
# 局部序列对齐 Smith-Waterman
def localAlignment(str1, str2):
    m = len(str1)
    n = len(str2)
    f = [[0 for _ in range(n + 1)] for _ in range(m + 1)]
    for i in range(m + 1):
        for j in range(n + 1):
            if i == 0 and j == 0:
                pass
            elif i == 0:
                f[i][j] = max(f[i][j - 1] - 2, 0)
            elif j == 0:
                f[i][j] = max(f[i - 1][j] - 2, 0)
            else:
                temp = 1 if str1[i - 1] == str2[j - 1] else -1
                f[i][j] = max(f[i - 1][j] - 2, f[i][j - 1] - 2, f[i - 1][j - 1] + temp, 0)
    return max([max(ele) for ele in f])
                
# 最长公共子串 
def longestCommonString(A, B):
    m = len(A)
    n = len(B)
    f = [[0 for _ in range(n + 1)] for _ in range(m + 1)]
    for i in range(1, m + 1):
        for j in range(1, n + 1):
            if A[i - 1] == B[j - 1]:
                f[i][j] = f[i - 1][j - 1] + 1
            else:
                f[i][j] = 0
    return max([max(ele) for ele in f])
# 最长的公共子序列 LCS
def find_lcseque(s1, s2):
     # 生成字符串长度加1的0矩阵,m用来保存对应位置匹配的结果
    m = [ [ 0 for x in range(len(s2)+1) ] for y in range(len(s1)+1) ]
    # d用来记录转移方向
    d = [ [ None for x in range(len(s2)+1) ] for y in range(len(s1)+1) ]

    for p1 in range(len(s1)):
        for p2 in range(len(s2)):
            if s1[p1] == s2[p2]:            #字符匹配成功,则该位置的值为左上方的值加1
                m[p1+1][p2+1] = m[p1][p2]+1
                d[p1+1][p2+1] = 'ok'
            elif m[p1+1][p2] > m[p1][p2+1]:  #左值大于上值,则该位置的值为左值,并标记回溯时的方向
                m[p1+1][p2+1] = m[p1+1][p2]
                d[p1+1][p2+1] = 'left'
            else:                           #上值大于左值,则该位置的值为上值,并标记方向up
                m[p1+1][p2+1] = m[p1][p2+1]
                d[p1+1][p2+1] = 'up'           
    (p1, p2) = (len(s1), len(s2))
    s = []
    while m[p1][p2]:    #不为None时
        c = d[p1][p2]
        if c == 'ok':   #匹配成功,插入该字符,并向左上角找下一个
            s.append(s1[p1-1])
            p1-=1
            p2-=1
        if c =='left':  #根据标记,向左找下一个
            p2 -= 1
        if c == 'up':   #根据标记,向上找下一个
            p1 -= 1
    s.reverse()
    return len(s)

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_23262411/article/details/122429873

智能推荐

维护顺序统计树中结点秩信息的策略与实践-程序员宅基地

文章浏览阅读819次,点赞29次,收藏16次。本文旨在深入探讨顺序统计树中结点秩信息的维护机制,特别是在插入和删除操作中如何保持这一关键信息的准确性。我们将详细分析插入和删除过程中的每个步骤,探讨如何在不影响红黑树操作渐近性能的前提下,有效地维护结点的秩信息。通过本文的阐述,读者将能够更好地理解顺序统计树的工作原理,以及如何在实际应用中高效地利用这一数据结构。

C# Modbus TCP上位机测试_modbus 测试 上位机-程序员宅基地

文章浏览阅读913次。前面说了三菱和西门子PLC的上位机通信,实际在生产应用中,设备会有很多不同的厂家生产的PLC,那么,我们就需要一种通用的语言,进行设备之间的通信,工业上较为广泛使用的语言之一就是Modbus。Modbus有多种连接方式,如串口(RTU)、以太网(TCP/IP),今天我们讲的是TCP,也就是插网线的方式。首先,我们安装从机的仿真,上位机软件作为主机。从机仿真可以用Modbus Slave这个软件。_modbus 测试 上位机

java毕业生设计宠物领养管理系统计算机源码+系统+mysql+调试部署+lw_宠物管理系统mysql源码-程序员宅基地

文章浏览阅读55次。java毕业生设计宠物领养管理系统计算机源码+系统+mysql+调试部署+lw。springboot学生心理健康信息咨询系统。springboot“西单”甜品线上预定系统。springboot高校教师科研成果管理系统。springboot师生共评的作业管理系统。springboot扶贫助农与产品合作系统。springboot京津冀景区网上导游系统。springboot个性化产品服务管理系统。springboot中医药院校科研会议系统。springboot中小企业设备管理系统。_宠物管理系统mysql源码

【控制control】运动学基础--坐标转换_在坐标系a中有一单位矢量k,不通过坐标原点而通过空间点p-程序员宅基地

文章浏览阅读3k次,点赞5次,收藏28次。系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加TODO:写完再整理文章目录系列文章目录前言一、运动学的理解二、运动学的目的三、位置运动学(1)位置的表示1)位姿表示原理2)位姿和相对位姿的概念3)不同坐标系下的位置表示(1)笛卡儿坐标【这个比较常用】(2)柱坐标(3)球坐标4)步骤(2)旋转的表示1)旋转原理2)旋转通过旋转矩阵表示(1)旋转矩阵原理(2)绕XYZ轴旋转方向的基本旋转矩阵(3)正交旋转矩阵(1)旋转矩阵的性质(2)主动旋转与被动旋转(4)旋转矩阵进行坐标_在坐标系a中有一单位矢量k,不通过坐标原点而通过空间点p

回顾2017,展望2018-程序员宅基地

文章浏览阅读62次。12月20日,距离2018不到2周的时间,时间流逝,而我仿佛还停留在过去,忘记了时间,迷茫,懵懂。这一年中似乎是在消耗,浪费,2016年春节过后,告别父母,我怀着比较复杂的心情再次来到陌生的上海,来的路上,看到那光彩耀人的霓虹灯,高大的摩天轮,一栋栋高楼大厦从眼前一晃而过,从乡村来的我好生羡慕,我期望着有一天能够站在高楼的顶端。今年一年我换了两处住房,由一种拆迁公寓搬到了小区住房,但这也并没有改变...

Visual Basic不可能消失-程序员宅基地

文章浏览阅读61次。转载VBGood作者:陶刚编译   近十年以来人们一直预言VisualBasic会消亡,但即使在VisualBasic.NET出现后,一切仍然没有发生变化。从最近的报道来看,VB.NET的未来受到了它的兄弟语言C#的挑战。即使过了这么多年,人们还是无法理解VB——以及现在的VB.NET——仍然是一种世界上最流行的编程语言。的确,某些VB程序员会转向C#、Java或Delphi,但...

随便推点

论文笔记:Hypergraph Convolution and Hypergraph Attention-程序员宅基地

文章浏览阅读2.8k次,点赞3次,收藏13次。前言论文链接:https://arxiv.org/abs/1901.081501. Hypergraph Convolution and Hypergraph Attention1.1 Hypergraph Revisited一个普通图定义为 G=(V,E)\mathcal{G}=(V,E)G=(V,E) ,其中节点集定义为 V={v1,v2,…,vN}V=\{v_1,v_2,\dots,v_N\}V={v1​,v2​,…,vN​},边集定义为 E⊆V×VE \subseteq V \times V_hypergraph convolution and hypergraph attention

三个绘图工具类详解Paint(画笔)Canvas(画布)Path(路径)_setstrokecap-程序员宅基地

文章浏览阅读2.5k次。drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint): 画弧,参数一是RectF对象,一个矩形区域椭圆形的界限用于定义在形状、大小、电 弧,参数二是起始角 (度)在电弧的开始,参数三扫描角(度)开始顺时针测量的,参数四是如果 这是真的话,包括椭圆中心的电 弧,并关闭它,如果它是假这将是一个弧线,参数五是Paint对象;..._setstrokecap

ARM处理器工作模式_操作系统内核通常处于()模式-程序员宅基地

文章浏览阅读2.8k次,点赞5次,收藏10次。一、ARM体系的CPU有以下7种工作模式:1、用户模式(usr):正常的程序执行状态2、快速中断模式(fiq):3、中断模式(irq):4、管理模式(svc):操作系统使用的保护模式5、系统模式(sys):运行具有特权的操作系统任务6、数据访问终止模式(abt):数据或指令预取终止时进入该模式7、未定义指令终止模式(und):未定义的指令执行时进入该模式_操作系统内核通常处于()模式

CSAPP lab2 二进制拆弹 binary bombs phase_4-程序员宅基地

文章浏览阅读566次。给出对应于7个阶段的7篇博客phase_1 https://www.cnblogs.com/wkfvawl/p/10632044.htmlphase_2 https://www.cnblogs.com/wkfvawl/p/10636214.htmlphase_3 https://www.cnblogs.com/wkfvawl/p/10651205.htmlphase_4 ht...

java newtonsoft.json_(转载)Newtonsoft.Json使用总结-程序员宅基地

文章浏览阅读749次。初识JSON.........................................................................................................................................2在ASP.NET中使用JSON............................................_java 能用newtonsoft.json吗

CSS 颜色代码大全 CSS颜色对照表_css 绿色-程序员宅基地

文章浏览阅读1.9w次,点赞11次,收藏89次。颜色对照表_css 绿色

推荐文章

热门文章

相关标签