计算两个字符串之间的相似度

1.jaccard相似度:字符级别——相同字符的个数占总字符的个数

参考文档:https://blog.csdn.net/u012836354/article/details/79103099

只是衡量两个字符串之间的相同字符的占比,而未考虑字符的排序导致的两个字符的差异

s1="艾伦图灵传"
s2="艾伦图灵传"
def jaccard_score(s1,s2):
    print("s1",set(s1))
    print("s2", set(s2))
    print("s1&s2", set(s1)&set(s2))
    print("s1 | s2", set(s1)|set(s2))
    return len(set(s1)&set(s2))/len(set(s1)|set(s2))

print(jaccard_score(s1,s2))
s1 {'灵', '传', '艾', '图', '伦'}
s2 {'灵', '传', '艾', '图', '伦'}
s1&s2 {'灵', '传', '艾', '图', '伦'}
s1 | s2 {'灵', '传', '艾', '图', '伦'}
score 1.0

2.最长公共子字符串的长度*2/(两个字符串的长度和)

动态规划:https://blog.csdn.net/qq_42233538/article/details/103433377

3.Levenshtein距离/编辑距离

是指两个字串之间,由一个转成另一个所需的最少的编辑操作次数。编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。一般来说,编辑距离越小,两个串的相似度越大。

参考文档: https://blog.csdn.net/ustbclearwang/article/details/81288815

                 https://www.jb51.net/article/98449.htm

Levenshtein的使用方法

安装方式:pip install python-Levenshtein

 Levenshtein.distance(str1,str2)计算编辑距离。是描述一个字符串转化成另一个字串最少的操作次数,在其中的操作包括插入、删除、替换。算法实现:动态规划。

s1="艾伦 图灵传"
s2="艾伦•图灵传"
print(Levenshtein.distance(s1,s2))

输出:

1

Levenshtein.hamming(str1,str2)计算汉明距离,要求str1和str2必须长度一致。是描述两个等长字串之间对应位置上不同字符的个数。

s1="艾伦 图灵传"
s2="艾伦•图灵传"
print(Levenshtein.hamming(s1,s2))

输出:

1

Levenshtein.ratio(str1,str2)计算莱文斯坦比。计算公式其中sum1是指str1和str2字串的长度总和,ldist是类编辑距离。注意这里是类编辑距离,在类编辑距离中删除、插入依然+1,但是替换+2。

s1="艾伦 图灵传"
s2="艾伦•图灵传"
print(Levenshtein.ratio(s1,s2))
0.8333333333333334 (12-2)/10
Levenshtein.jaro(str1,str2)  计算Jaro距离

参考:https://zhuanlan.zhihu.com/p/99788854

Levenshtein.jaro_winkler(str1,str2)  计算Jaro-Winkler距离

你可能感兴趣的:(python,字符串的相似度,Levenshtein)