背景
笔者最近有个任务需要从多个系统取出工单信息进行处理, 但是工单只有一个标题可以关联,而且还不是严格相等的。例如:
- 易查通日常升级的发布请示
- 【易查通】易查通系统日常升级
这种判断比较棘手,只能利用 字符串相似度 进行衡量:
1
2
|
if similarity('易查通日常升级的发布请示', '【易查通】易查通系统日常升级') > 0.5:
print('哥俩是同个工单')
|
那么, Python 有现成的类库可衡量字符串相似度么?
difflib
基于 difflib.SequenceMatcher 类,我们可以实现一个用于计算字符串相似度的函数:
1
2
3
4
|
from difflib import SequenceMatcher
def similarity(a, b):
return SequenceMatcher(None, a, b).ratio()
|
ratio 方法返回一个系数,衡量两个字符串的相识度,取值在 0-1 之间。
如果两个字符串完全相同,则系数为 1.0 :
1
2
|
>>> similarity('fasionchan', 'fasionchan')
1.0
|
如果两个字符串完全没有任何相同之处,则系数为 0.0 :
1
2
3
4
|
>>> similarity('fasionchan', '')
0.0
>>> similarity('aaaaaaaa', 'bbbbbbbb')
0.0
|
其他情况则介于 0 与 1 之间,越接近 1 越相似:
1
2
3
4
|
>>> similarity('apple', 'banana')
0.18181818181818182
>>> similarity('易查通日常升级的发布请示', '【易查通】易查通系统日常升级')
0.5384615384615384
|
【小菜学Python】系列文章首发于公众号【小菜学编程】,敬请关注: