Levenshtein简介

最近在文字处理,用到Levenshtein这个包,发现一篇好文,转自https://www.jb51.net/article/98449.htm

至于要装Levenshtein这个包,而又不想装VC+的可以向我伸手,看见的话会发一下whl文件

编辑距离:又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少的编辑操作次数。编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。一般来说,编辑距离越小,两个串的相似度越大。

Levenshtein的应用

Levenshtein.distance(str1,str2)计算编辑距离。是描述一个字符串转化成另一个字串最少的操作次数,在其中的操作包括插入、删除、替换。算法实现:动态规划。

Levenshtein.hamming(str1,str2)

计算汉明距离,要求str1和str2必须长度一致。是描述两个等长字串之间对应位置上不同字符的个数。

Eg:

Levenshtein.hamming('abc','aac')=1

Levenshtein.ratio(str1,str2)

计算莱文斯坦比。计算公式其中sum1是指str1和str2字串的长度总和,ldist是类编辑距离。注意这里是类编辑距离,在类编辑距离中删除、插入依然+1,但是替换+2。

计算Jaro距离

两个给定字符串S1和S2的Jaro距离为:

 

其中m为s1,s2匹配的字符数,t是换位的数目。

两个分别来自S1和S2的字符如果相距不超过

 时,

我们就认为这两个字符串是匹配的;而这些相互匹配的字符则决定了换位的数目t,简单来说就是不同顺序的匹配字符的数目的一半即为换位的数目t。举例来说,MARTHA与MARHTA的字符都是匹配的,但是这些匹配的字符串中,T和H要换位才能把MARTHA变为MARHTA,那么T和H就是不同的顺序的匹配字符,

两个字符串的Jaro Distance即为:

 

Levenshtein.jaro_winkler(s1,s2)

计算Jaro-Winkler距离,而Jaro-Winkler则给予了起始部分就相同的字符串更高的分数,他定义了一个前缀p,给予两个字符串,如果前缀部分有长度为l的部分相同,则Jaro-Winkler 距离为

是两个字符串的Jaro距离

l是前缀的相同的长度,但是规定最大为4

p是调整分数的常数,规定不能超过25,不然可能出现dw大于1的情况,Winkler将这个常数定义为0.1

这样,上面提及的MARTHA和MARHTA的Jaro-Winkler距离为

 

猜你喜欢

转载自blog.csdn.net/ustbclearwang/article/details/81288815