说我有一个参考字符串
“abcdabcd”
和目标字符串
“abcdabEd”
javascript和python中是否有一种简单的方法可以获得字符串序列相似度?
示例:
“abcdabcd”与“abcdabEd”的区别在于字符“E”,因此相似度的比例很高但小于1.0
“bcdabcda”与“abcdabEd”的区别很大,因为特定字符串索引处的每个字符都不同,因此相似比为0.0
请注意,相似性比率不是每个字符串中有多少相似字符,而是序列彼此之间的相似程度
因此代码如
# python - incorrect for this problem
difflib.SequenceMatcher(None, "bcdabcda", "abcdabEd").ratio()
会错的
答案 0 :(得分:2)
您可以使用此通用公式,它适用于具有相同或不同长度的字符串或对象数组:
相似性=共同#/(SQRT(NX * NY));
其中#common是常见事件(在这种情况下是匹配字符的数量);
nx是对象数组x(或称为x的字符串)的长度;
ny是对象数组y(或称为y的字符串)的长度。
如果字符串的长度相同,则公式简化为简单情况:
相似性=共同#/ N;
哪里:
N = NX = ny的关系。
在python中,这个字符串相似度的公式(考虑到你想要的字符顺序)可以写成:
from math import sqrt
def similarity(x, y):
n=min(len(x), len(y))
common=0
for i in range(n):
if (x[i]==y[i]):
common+=1
return common/sqrt(len(x)*len(y))
在javascript中它是类似的。
答案 1 :(得分:1)
怎么回合
float(sum([a==b for a,b in zip(my_string1,my_string2)]))/len(my_string1)
>>> s1,s2 = "abcdabcd","abcdabEd"
>>> print float(sum([a==b for a,b in zip(s1,s2)]))/len(s1)
0.875