Python计算字符串相似度

背景

笔者最近有个任务需要从多个系统取出工单信息进行处理,但是工单只有一个标题可以关联,而且还不是严格相等的。例如:

  • 易查通日常升级的发布请示
  • 【易查通】易查通系统日常升级

这种判断比较棘手,只能利用 字符串相似度 进行衡量:

  1. if similarity('易查通日常升级的发布请示', '【易查通】易查通系统日常升级') > 0.5:
  2. print('哥俩是同个工单')

那么, Python 有现成的类库可衡量字符串相似度么?

difflib

基于 difflib.SequenceMatcher 类,我们可以实现一个用于计算字符串相似度的函数:

  1. from difflib import SequenceMatcher
  2.  
  3. def similarity(a, b):
  4. return SequenceMatcher(None, a, b).ratio()

ratio 方法返回一个系数,衡量两个字符串的相识度,取值在 0-1 之间。

如果两个字符串完全相同,则系数为 1.0

  1. >>> similarity('fasionchan', 'fasionchan')
  2. 1.0

如果两个字符串完全没有任何相同之处,则系数为 0.0

  1. >>> similarity('fasionchan', '')
  2. 0.0
  3. >>> similarity('aaaaaaaa', 'bbbbbbbb')
  4. 0.0

其他情况则介于 01 之间,越接近 1 越相似:

  1. >>> similarity('apple', 'banana')
  2. 0.18181818181818182
  3. >>> similarity('易查通日常升级的发布请示', '【易查通】易查通系统日常升级')
  4. 0.5384615384615384

下一步

订阅更新,获取更多学习资料,请关注我们的 微信公众号

../_images/wechat-mp-qrcode.png小菜学编程

微信打赏