修改python中两个文本字符串之间的编辑距离算法

修改python中两个文本字符串之间的编辑距离算法,python,r,python-3.x,hamming-distance,Python,R,Python 3.x,Hamming Distance,我试图对标准算法添加两个修改 我的字符串是文本和区分大小写的 说我有一个词“笼子”。“cage”和“cage”之间的汉明距离为0(第一个字母)。任何其他字母都是0.5。(说“笼子”和“笼子” 第二,“cage”和“caKe”将是1.5(不同的字母=1加上不同的大写字母=0.5),第三,“caKe”和“caqe”将是0(认为k和q是同一个字母) 同样的规则也适用于长句。(说“生日快乐”和“生日快乐”距离=1+1+0.5=2.5) 我想通过在任何一组单词/句子和修改算法,而不是标准算法需要适用 我已

我试图对标准算法添加两个修改

我的字符串是文本和区分大小写的

说我有一个词“笼子”。“cage”和“cage”之间的汉明距离为0(第一个字母)。任何其他字母都是0.5。(说“笼子”和“笼子”

第二,“cage”和“caKe”将是1.5(不同的字母=1加上不同的大写字母=0.5),第三,“caKe”和“caqe”将是0(认为k和q是同一个字母)

同样的规则也适用于长句。(说“生日快乐”和“生日快乐”距离=1+1+0.5=2.5)

我想通过在任何一组单词/句子和修改算法,而不是标准算法需要适用

我已经用python为案例1编写了一个示例代码,但无法理解如何继续大写

 def editDistance(str1, str2):  if str1[1]==str2[1]:
            return editDistance(str1,str2)
 print editDistance(str1, str2, len(str1), len(str2))

注:用R的任何解释都会很好。

请查看此代码-我也对其进行了注释以供解释

def editDistance(str1, str2):
    if (str1 == str2): # if both strings equal, print 0
        print 0
    else:
        counter = 0
        for c in range(1, len(str1)-1): # iterate through each character in string
            if (str1[c] == str2[c]): # if characters are equal, don't increment counter
                counter += 0
            elif (((str1[c].lower()) == str2[c]) or ((str2[c].lower()) == str1[c])):
                counter += 0.5 # if the lowercase of characters are equal, increment 0.5
            elif ((str1[c].islower()) and (str2[c].islower())):
                counter += 1 # else if both unequal, both lowercase, increment 1
            elif ((str1[c].isupper()) and (str2[c].isupper())):
                counter += 1 # else if both unequal, both uppercase, increment 1
            else:
                counter += 1.5 # reaches here if both unequal and different case, so 1.5
        print counter

editDistance(str1, str2); # call the function with the strings

我不知道你为什么要调用两次字符串长度的函数。我已经试过了,效果正如你所期望的。希望这有帮助!

添加/删除场景如何?如果
cae
变成
cae
?@vivek Kalyanarangam我的字符串长度相等。@nj2337感谢你对代码的精彩解释。如我运行此命令时,我传递的任何文本字符串的值都为0,因为我的所有字符串都相等。例如,“data science”和“data scient”@Yashodhara您好,它适用于您在问题中提供的所有案例。我不知道为什么它对您的行为有所不同。您能粘贴一个链接到您的代码的pythonfidle吗?我会检查that@nj2337我有一个问题,如果我想把两个字母等同于一个字母,那么把k=q当作“蛋糕”和“caqe”是0。有没有具体的功能?@Yashodhara太好了!如果我的答案已经解决了你的问题,请投票并将其标记为答案:)为了使两个字母相等,你可以只包含
if(str1[c]='k'和str2[c]='q'):counter+=0
ie。在这种情况下不要增加