Guest User

Levenshtein Distance

a guest
Sep 14th, 2016
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.30 KB | None | 0 0
  1. def initMinEditDistTable(source, target):
  2.     xLen = len(target)
  3.     yLen = len(source)
  4.  
  5.     minEditDistTable = [[0 for x in range(xLen + 2)] for y in range(yLen + 2)]
  6.    
  7.     minEditDistTable[0][0] = "#"
  8.     minEditDistTable[0][1] = "#"
  9.     minEditDistTable[1][0] = "#"
  10.  
  11.     for x in range(xLen):
  12.         minEditDistTable[0][x + 2] = target[x]
  13.         minEditDistTable[1][x + 2] = x + 1
  14.  
  15.     for y in range(yLen):
  16.         minEditDistTable[y + 2][0] = source[y]
  17.         minEditDistTable[y + 2][1] = y + 1
  18.  
  19.     return minEditDistTable
  20.  
  21. def calcMinEditDistTable(source, target):
  22.     xLen = len(target)
  23.     yLen = len(source)
  24.  
  25.     minEditDistTable = initMinEditDistTable(source, target)
  26.  
  27.     for x in range(xLen):
  28.         for y in range(yLen):
  29.             if source[y] == target[x]:
  30.                 subCost = 0
  31.             else:
  32.                 subCost = 2
  33.            
  34.             up = minEditDistTable[y + 1][x + 2] + 1
  35.             left = minEditDistTable[y + 2][x + 1] + 1
  36.             diag = minEditDistTable[y + 1][x + 1] + subCost
  37.  
  38.  
  39.             minEditDistTable[y + 2][x + 2] = min(up, left, diag)                
  40.  
  41.     return minEditDistTable
  42.  
  43.  
  44.  
  45. test = calcMinEditDistTable("intention", "execution")
  46.  
  47. print('\n'.join([''.join(['{:>4}'.format(item) for item in row]) for row in test]))
Advertisement
Add Comment
Please, Sign In to add comment