Module leven
Levenstein distance. Converted from CPP …
Expand source code
#!/usr/bin/env python
__doc__ = ''' Levenstein distance. Converted from CPP ... '''
darr = [];
MXDIM = 36
def Minimum(a, b, c):
'''
Get minimum of three values
'''
mi = a;
if b < mi:
mi = b
if c < mi:
mi = c
return mi
def show_mx(darr):
''' Show Matrix '''
cnt = 0
for ii in darr:
cnt2 = 0
for iii in ii:
print(darr[cnt][cnt2], end=' ')
cnt2 += 1
print()
cnt += 1
print()
def create_mx():
''' Create Matrix '''
global darr
# Create two dimentional list
for ii in range(MXDIM):
darr2 = []
for iii in range(MXDIM):
darr2.append(0)
darr.append(darr2[:])
def Distance (s, t):
''' Compute Levenshtein distance. Uses pre made darr. '''
global darr
n = len(s); m = len(t);
if n > MXDIM or m > MXDIM:
print("Levenshtine -- Warn: Array Dim exceeded ", s, t)
return MXDIM
#print "'" + s+ "'", "'" + t + "'"
#print "n", n, "m", m
#// If any of them is empty ... return len() of the other
if (n == 0): return m;
if (m == 0): return n;
cost = 0
#// Step 1 Create matrix
if len(darr) == 0:
create_mx()
#// Step 2 Fill matrix
for ii in range(n+1):
darr[ii][0] = ii
for ii in range(m+1):
darr[0][ii] = ii
#// Step 3 Eval matrix
for ii in range(1, n+1):
s_i = s[ii-1]
for iii in range(1, m+1):
t_j = t[iii - 1]
if (s_i == t_j):
cost = 0
else:
cost = 1
above = darr[ii-1][iii] # GetAt (d,i-1,j, n);
left = darr[ii][iii-1] # GetAt (d,i, j-1, n);
diag = darr[ii-1][iii-1] # GetAt (d, i-1,j-1, n);
cell = Minimum(above + 1, left + 1, diag + cost)
darr[ii][iii] = cell # PutAt (d, i, j, n, cell);
result = darr[n][m]
return result;
# EOF
Functions
def Distance(s, t)-
Compute Levenshtein distance. Uses pre made darr.
Expand source code
def Distance (s, t): ''' Compute Levenshtein distance. Uses pre made darr. ''' global darr n = len(s); m = len(t); if n > MXDIM or m > MXDIM: print("Levenshtine -- Warn: Array Dim exceeded ", s, t) return MXDIM #print "'" + s+ "'", "'" + t + "'" #print "n", n, "m", m #// If any of them is empty ... return len() of the other if (n == 0): return m; if (m == 0): return n; cost = 0 #// Step 1 Create matrix if len(darr) == 0: create_mx() #// Step 2 Fill matrix for ii in range(n+1): darr[ii][0] = ii for ii in range(m+1): darr[0][ii] = ii #// Step 3 Eval matrix for ii in range(1, n+1): s_i = s[ii-1] for iii in range(1, m+1): t_j = t[iii - 1] if (s_i == t_j): cost = 0 else: cost = 1 above = darr[ii-1][iii] # GetAt (d,i-1,j, n); left = darr[ii][iii-1] # GetAt (d,i, j-1, n); diag = darr[ii-1][iii-1] # GetAt (d, i-1,j-1, n); cell = Minimum(above + 1, left + 1, diag + cost) darr[ii][iii] = cell # PutAt (d, i, j, n, cell); result = darr[n][m] return result; def Minimum(a, b, c)-
Get minimum of three values
Expand source code
def Minimum(a, b, c): ''' Get minimum of three values ''' mi = a; if b < mi: mi = b if c < mi: mi = c return mi def create_mx()-
Create Matrix
Expand source code
def create_mx(): ''' Create Matrix ''' global darr # Create two dimentional list for ii in range(MXDIM): darr2 = [] for iii in range(MXDIM): darr2.append(0) darr.append(darr2[:]) def show_mx(darr)-
Show Matrix
Expand source code
def show_mx(darr): ''' Show Matrix ''' cnt = 0 for ii in darr: cnt2 = 0 for iii in ii: print(darr[cnt][cnt2], end=' ') cnt2 += 1 print() cnt += 1 print()