一文详解Levenshtein,手推Levenshtein.editops()编辑操作次数

最近在比赛上用到了Levenshtein包中的一些函数,发现网上对于这个包的相关介绍比较零散,所以想写一篇博文详细的介绍一下这个包及其相关函数的用法,力求一文详解,如有纰漏和缺陷请各位小伙伴不吝赐教。

文章目录

  • 1 Levenshtein包简介
  • 2 Levenshtein.editops()函数详解
  • 3 Levenshtein包中的常用函数
  • 4 相关介绍文章推荐

1 Levenshtein包简介

Levenshtein是一个python第三方包,它主要集成了一些和编辑距离有关的方法,可以用来计算文本相似度等。编辑距离:又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少的编辑操作次数。编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。一般来说,编辑距离越小,两个字符串的相似度越大。

2 Levenshtein.editops()函数详解

Levenshtein.editops(str1,str2)函数是用来:找到字符串str1转换成字符串str2的所有编辑操作序列。其中,编辑操作用三种类型:replace替换操作、delete删除操作,insert插入操作
下面以字符串'tkitten'转换成字符串'sitting'的例子来介绍Levenshtein.editops()函数。

import Levenshtein
str1 = 'tkitten'
str2 = 'sitting'
res = Levenshtein.editops(str1, str2)
print(res)

程序输出结果为:

[('replace', 0, 0), ('delete', 1, 1), ('replace', 5, 4), ('insert', 7, 6)]

输出含义介绍:
输出为一个list类型,其中的每个元素以元组的形式记录一次编辑操作。编辑操作通式为:(‘编辑操作类型’,字符串str1的索引位置,字符串str2的索引位置)
以本次输出的第一个编辑操作为例:('replace', 0, 0)
其含义为:对str1[0]这个字符执行替换操作,替换为str[0]元素
最后,结合程序手推‘tkitten’转换成’sitting‘的过程。从输出中看,‘tkitten’转换成‘sitting‘需要执行四次编辑,分别为:

  1. str1[0]替换成str2[0]
  2. 删除str1[1]
  3. str1[4]替换成str2[4]
  4. 在str1[7]位置上插入str2[6]

下图可视化出了上述的编辑过程:

一文详解Levenshtein,手推Levenshtein.editops()编辑操作次数_第1张图片

3 Levenshtein包中的常用函数

除了显示编辑操作序列的editops()函数外,Levenshtein包还集成了很多处理本文相似度的函数。常见的有:

  • distance() : 计算两个字符串之间需要操作的绝对距离。
  • apply_edit(): 根据第一个参数editops()给出的操作权重,对第一个字符串基于第二个字符串进行相对于权重的操作。
  • jaro_winkler() :计算两个字符串的相似度。
  • median():找到一个列表中所有字符串中相同的元素,并且将这些元素整合,找到最接近这些元素的值,可以不是字符串中的值。
  • setmedian():找到一个字符串集的中位数作为序列传递。取最接近的一个字符串进行传递,这个字符串必须是最接近所有字符串,并且返回的字符串始终是序列中的字符串之一。
  • hamming() :计算两个字符串不同字符的个数(这两个字符串长度必须相同)。
  • inverse():反转所有的编辑操作序列。
  • jaro():计算个字符串的相似度,这个给予相同的字符更高的权重指数。
  • median_improve():通过扰动来改进近似的广义中值字符串。
  • quickmedian():最快的速度找到最相近元素出现最多从新匹配出的一个新的字符串。
  • ratio():计算两个字符串的相似度,它是基于最小编辑距离,也就是editops()方法返回的操作序列的长度。
  • seqratio():计算两个字符串序列的相似率。
  • setratio():计算两个字符串集的相似率作为序列传递。

4 相关介绍文章推荐

关于Levenshtein的知识和用法,我整理了一些相对有价值的介绍文章,作为拓展学习使用。
1、python Levenshtein包安装不成功解决办法。该博客主要介绍了Levenshtein包安装不成功解决办法。
2、使用 Levenshtein 寻找彼此相似的字符串对。该博客主要主要从一个实际问题出发,探讨了中文字符串下寻找彼此相似的字符串对的方法,其中涉及到使用Levenshtein来解决问题。
3、python,Levenshtein包,字符串相似度。该文章主要介绍了几个Levenshtein包中函数的使用方法

你可能感兴趣的:(python语法,python,开发语言,算法)