Python Levenshtein 计算文本之间的距离

莱文斯坦距离,又称Levenshtein距离,是编辑距离的一种。 指两个字串之間,由一个转成另一个所需的最少编辑操作次数。 允许的编辑操作包括将一个字符替换成另一个字符,插入一个字符,刪除一个字符。

GitHub 提供了计算莱文斯坦距离的包。
安装方法:

用法:

  1. Levenshtein.hamming(str1, str2)
    计算汉明距离。要求str1和str2必须长度一致。是描述两个等长字串之间对应位置上不同字符的个数。如
>>> Levenshtein.hamming('hello', 'world')
4
>>> Levenshtein.hamming('abc', 'abd')
1
  1. Levenshtein.distance(str1, str2)
    计算编辑距离(也成Levenshtein距离)。是描述由一个字串转化成另一个字串最少的操作次数,在其中的操作包括插入删除替换。如
>>> Levenshtein.distance('hello', 'world')
4
>>> Levenshtein.distance('abc', 'abd')
1
>>> Levenshtein.distance('abc', 'aecfaf')
4
  1. Levenshtein.ratio(str1, str2)
    计算莱文斯坦比。计算公式 r = (sum - ldist) / sum, 其中sum是指str1 和 str2 字串的长度总和,ldist是类编辑距离
    注意:这里的类编辑距离不是2中所说的编辑距离,2中三种操作中每个操作+1,而在此处,删除、插入依然+1,但是替换+2
    这样设计的目的:ratio('a', 'c'),sum=2,按2中计算为(2-1)/2 = 0.5,’a’,'c’没有重合,显然不合算,但是替换操作+2,就可以解决这个问题。
>>> Levenshtein.ratio('hello', 'world')
0.2
>>> Levenshtein.ratio('abc', 'abd')
0.6666666666666666
>>> Levenshtein.ratio('abc', 'aecfaf')
0.4444444444444444
  1. Levenshtein.jaro(s1, s2)
    计算jaro距离, d j = { 0 i f m = 0 1 3 ( m ∣ s 1 ∣ + m ∣ s 2 ∣ + m − t m ) o t h e e r w i s e d_{j}=\left\{\begin{matrix} 0 & if m = 0\\ \frac{1}{3}\left ( \frac{m}{\left | s_{1} \right |}+ \frac{m}{\left | s_{2} \right |}+ \frac{m-t}m \right ) & otheerwise \end{matrix}\right. dj={031(s1m+s2m+mmt)ifm=0otheerwise
    其中m s 1 s_{1} s1 s 2 s_{2} s2的匹配长度,当位置的认为匹配当该位置字符相同,或者在不超过 ⌊ m a x ( ∣ s 1 ∣ , ∣ s 2 ∣ ) 2 ⌋ − 1 \left \lfloor \frac{max\left ( \left | s_{1} \right |, \left| s_{2} \right | \right )}{2} \right \rfloor-1 2max(s1,s2)1
    t是调换次数的一半
>>> Levenshtein.jaro('hello', 'world')
0.43333333333333335
>>> Levenshtein.jaro('abc', 'abd')
0.7777777777777777
>>> Levenshtein.jaro('abc', 'aecfaf')
0.6666666666666666
  1. Levenshtein.jaro_winkler(s1, s2)
    计算Jaro–Winkler距离 d w = d j + ( l p ( 1 − d j ) ) d_{w} = d_{j}+(lp(1-d_{j})) dw=dj+(lp(1dj))
>>> Levenshtein.jaro_winkler('hello', 'world')
0.43333333333333335
>>> Levenshtein.jaro_winkler('abc', 'abd')
0.8222222222222222
>>> Levenshtein.jaro_winkler('abc', 'aecfaf')
0.7

参考:

  1. PYPI
  2. GitHub
  3. python-Levenshtein几个计算字串相似度的函数解析
  4. 人工智能自动组方实习笔记5—中医数据预处理流程
  • 5
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值