python-levenshtein算法库
distance函数计算编辑距离,规则是:添加、删除和替换一个字符距离都+1;
ratio函数计算levenstein比,其中替换一个字符距离变为2。这个也是我们需要实现的。
但是因为一些原因,有个外部程序调用第三方python包有点问题,所以需要用python写一个简单的levenstein距离实现算法。本着拿来主义在网上找了找,好多程序执行有问题,所以自己重写了一下:
简洁版levenshtein.ratio算法
根据百度百科“编辑距离”了解一下具体算法(不要嘲笑),维基百科“levenshtein distance”也一样:
假设比较“coffee”和‘cafe’的相似度:
① 初始化一个5*7矩阵:
图片来自百度百科
② 除了第一行和第一列,分别计算剩下的值,例如dij取3个值得最小值:正上方的值distance_matrix(i-1)j+1,左方相邻值distance_matrixi(j-1)+1,四方格对角值distance_matrix (i-1)(j-1)+2(如果是只计算编辑距离的话,这里是+1,因为我们需要levenshtein比,所以这里是+2);
③ 最终结果为矩阵右下角的值,结果为4。也就是cafe中a替换为o,插入f和e,变为coffee;levenshtein比为4/(4+6)=0.6。
本算法对于字符串相似度比较比较适合,而对于文章的相似度比较则较多使用向量空间模型vsm,例如td-idf算法。先进行分词再通过词频向量,利用向量余弦值计算相似度。