* Levenshtein string comparison function * * Web site: http://rumkin.com/reference/algorithms/fuzzy_strings/ * License: http://rumkin.com/license/ function CalcLevenDistance parameters m.str1, m.str2 local m.i, m.j, m.diagonal, m.let, m.cost dimension m.arr(len(m.str1) + 1) dimension m.letters(len(m.str1)) if len(m.str1) * len(m.str2) == 0 return len(m.str1) + len(m.str2) endif for m.i = 1 to alen(m.arr) m.arr(m.i) = m.i next for m.i = 1 to len(m.str1) m.letters(m.i) = substr(m.str1, m.i, 1) next for m.i = 1 to len(m.str2) m.diagonal = m.arr(1) - 1 m.arr(1) = m.i + 1 m.let = substr(m.str2, m.i, 1) for m.j = 1 to len(m.str1) m.cost = m.diagonal if m.letters(m.j) != m.let m.cost = m.cost + 1 endif if m.cost > m.arr(m.j) m.cost = m.arr(m.j) endif if m.cost > m.arr(m.j + 1) m.cost = m.arr(m.j + 1) endif m.diagonal = m.arr(m.j + 1) - 1 m.arr(m.j + 1) = m.cost + 1 next next return m.arr(alen(m.arr)) - 1 endfunc