一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python實現計算最小編輯距離

Python實現計算最小編輯距離

2020-08-17 11:02腳本之家 Python

這篇文章主要介紹了Python實現計算最小編輯距離的相關代碼,有需要的小伙伴可以參考下

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

Python實現計算最小編輯距離

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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實現了從對象A轉化對象B的步驟,那么計算最小編輯距離的代碼也可以這樣寫了:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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

代碼地址

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲精品电影天堂网 | 国产成人在线视频 | 日韩在线成人 | 国产亚洲精品高清在线 | 5555kkkk香蕉在线观看 | 蜜月aⅴ免费一区二区三区 蜜桃影像传媒推广 | 日本一区二区三区国产 | 俄罗斯烧性春三级k8播放 | 黑人k8经典| 国产成人精品一区二区仙踪林 | 福利视频一区青娱 | 娇妻被健身教练挺进小说阅读 | 99综合网 | 欧美激情亚洲 | 欧美草逼网 | 污污在线免费观看 | 日本特级大片 | 国产精品久久久久久久久久久威 | 白丝打脚枪 | 免费被靠视频动漫 | 胖女性大bbbbbb | 天天色天天综合 | 亚洲视频观看 | 亚洲精品丝袜在线一区波多野结衣 | 亚洲欧美日韩国产综合专区 | se01在线看片 | 国产一线天| 视频亚洲一区 | 成人做视频免费 | 高清不卡一区 | 公交车揉捏大乳呻吟喘娇 | 91亚洲视频在线观看 | 2022色婷婷综合久久久 | 单身男女韩剧在线看 | 卫生间被教官做好爽HH视频 | 国产二区三区 | 天天爱天天做天天爽天天躁 | 免费一级特黄特色大片∵黄 | 国产高清在线视频一区二区三区 | 色老板在线视频 | 色老妇|