我正在尝试对标准算法添加两个修改。
我的字符串是文本和区分大小写的。
说我有一个字“笼子”。 “笼子”和“笼子”之间的汉明距离为0(第一个字母)。任何其他字母都是0.5。 (比如,“笼子”和“cAge”。
两个,“笼子”和“caKe”将是1.5(不同的字母= 1加上不同的上限= 0.5),三,“cake”和“caqe”将是0(将k和q视为相同的字母)。
同样的规则也适用于长句。 (说“生日快乐”和“快乐的BudthDay”距离= 1 + 1 + 0.5 = 2.5)
我想传递任何一组单词/句子和修改算法而不是标准算法需要适用。
我已经在案例1的python中编写了一个示例代码,但无法理解如何继续使用大写字母。
def editDistance(str1, str2): if str1[1]==str2[1]:
return editDistance(str1,str2)
print editDistance(str1, str2, len(str1), len(str2))
PS:R中的任何解释都会很棒。
答案 0 :(得分:0)
检查这段代码 - 我也提出了反对意见的解释。
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
我不确定你为什么用字符串长度调用函数两次。我试过这个,它按预期工作。希望这有帮助!