Skip to content

Instantly share code, notes, and snippets.

@ikegami-yukino
Created February 5, 2014 07:02
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ikegami-yukino/8818591 to your computer and use it in GitHub Desktop.
Save ikegami-yukino/8818591 to your computer and use it in GitHub Desktop.
重み付きレーベンシュタイン距離 Weighted Levenshtein Distance
def weighted_levenshtein(a, b, insert=1, delete=1, substitute=1):
len_a = len(a)
len_b = len(b)
m = [ [0] * (len_b + 1) for i in xrange(len_a + 1) ]
for i in xrange(len_a + 1):
m[i][0] = i * delete
for j in xrange(len_b + 1):
m[0][j] = j * insert
for (i, j) in itertools.product(xrange(1, len_a + 1), xrange(1, len_b + 1)):
x = 0 if a[i-1] == b[j-1] else substitute
m[i][j] = min(m[i-1][j] + delete, m[i][j-1] + insert, m[i-1][j-1] + x)
return m[-1][-1]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment