国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python實現(xiàn)計算最小編輯距離

2020-01-04 17:36:14
字體:
來源:轉載
供稿:網(wǎng)友
這篇文章主要介紹了Python實現(xiàn)計算最小編輯距離的相關代碼,有需要的小伙伴可以參考下
 

最小編輯距離或萊文斯坦距離(Levenshtein),指由字符串A轉化為字符串B的最小編輯次數(shù)。允許的編輯操作有:刪除,插入,替換。具體內容可參見:維基百科—萊文斯坦距離。一般代碼實現(xiàn)的方式都是通過動態(tài)規(guī)劃算法,找出從A轉化為B的每一步的最小步驟。從Google圖片借來的圖,

Python,最小編輯距離

Python代碼實現(xiàn), (其中要注意矩陣的下標從1開始,而字符串的下標從0開始):

 def normal_leven(str1, str2):   len_str1 = len(str1) + 1   len_str2 = len(str2) + 1   #create matrix   matrix = [0 for n in range(len_str1 * len_str2)]   #init x axis   for i in range(len_str1):     matrix[i] = i   #init y axis   for j in range(0, len(matrix), len_str1):     if j % len_str1 == 0:       matrix[j] = j // len_str1   for i in range(1, len_str1):     for j in range(1, len_str2):       if str1[i-1] == str2[j-1]:         cost = 0       else:         cost = 1       matrix[j*len_str1+i] = min(matrix[(j-1)*len_str1+i]+1,                     matrix[j*len_str1+(i-1)]+1,                     matrix[(j-1)*len_str1+(i-1)] + cost)   return matrix[-1]

最近看文章看到Python庫提供了一個包difflib實現(xiàn)了從對象A轉化對象B的步驟,那么計算最小編輯距離的代碼也可以這樣寫了:

 def difflib_leven(str1, str2):  leven_cost = 0  s = difflib.SequenceMatcher(None, str1, str2)  for tag, i1, i2, j1, j2 in s.get_opcodes():    #print('{:7} a[{}: {}] --> b[{}: {}] {} --> {}'.format(tag, i1, i2, j1, j2, str1[i1: i2], str2[j1: j2]))    if tag == 'replace':      leven_cost += max(i2-i1, j2-j1)    elif tag == 'insert':      leven_cost += (j2-j1)    elif tag == 'delete':      leven_cost += (i2-i1)  return leven_cost
 

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 贡嘎县| 屯留县| 伊宁县| 磴口县| 西青区| 河源市| 循化| 普宁市| 禹州市| 海林市| 雷山县| 湘阴县| 灌南县| 宿松县| 连平县| 长沙市| 措美县| 肃北| 江门市| 新化县| 霍城县| 沙湾县| 大城县| 高台县| 南安市| 镇雄县| 雅江县| 富顺县| 济南市| 焉耆| 凌海市| 微山县| 比如县| 海盐县| 晋中市| 文成县| 和平区| 鸡泽县| 曲松县| 晋江市| 广西|