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距离