Python levenshtein算法 字符串相似度

#!/usr/bin/python
# coding:utf-8

def    levenshtein_ratio(first, second):
    if len(first)== 0 and len(second) == 0:
        return 1.0
    distance = levenshtein_distance(first,second,1,1,2)
    return 1-float(distance)/(len(first)+len(second))

def    levenshtein_distance(first, second, cost_ins = 1 , cost_del = 1 , cost_rep = 1):
    '''
    计算两个字符串之间的编辑距离
    :输入参数 first: 第一个字符串
    :输入参数 second: 第二个字符串
     :输入参数 cost_ins: 插入开销
    :输入参数 cost_del: 删除开销
     :输入参数 cost_rep: 替换开销
    :返回值: 编辑距离
   '''
    if len(first)== 0 or len(second) == 0:
        return len(first)+len(second)
    first_length = len(first) + 1
    second_length = len(second)+ 1
    distance_matrix = [range(i, second_length + i) for i in range(first_length)]
    # 初始化矩阵
    for i in range(1, first_length):
        for j in range(1, second_length):
            deletion = distance_matrix[i-1][j] + cost_del
            insertion = distance_matrix[i][j-1] + cost_ins
            substitution = distance_matrix[i-1][j-1]
            if first[i-1] != second[j-1]:
                substitution += cost_rep
            distance_matrix[i][j] = min(insertion, deletion, substitution)
    return distance_matrix[first_length-1][second_length-1]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值