Levenshtein distance/Alignment: Difference between revisions

(Added Ruby)
Line 359:
=={{header|Ruby}}==
{{trans|Tcl}}
uses "lcs" from [[Longest common subsequence#Ruby|here]]
<lang ruby>require 'lcs'
 
def levenshtein_align(a, b)
apos, bpos = LCS.new(a, b).backtrackbacktrack2
bpos = LCS.new(b, a).backtrack
c = ""
Line 371 ⟶ 370:
dx = dy = 0
apos.zip(bpos) do |x,y|
ifdiff = x + dx <- y+ - dy
if diff n< = (y+dy)-(x+dx)0
dx +-= ndiff
c += "-" * n(-diff)
elsif x+dxdiff > y+dy0
ndy += (x+dx)-(y+dy)diff
dyd += n"-" * diff
d += "-" * n
end
c += a[x0+1..x]
Line 385 ⟶ 383:
y0 = y
end
c += a[x0+1..-1]
d += b[y0+1..-1]
aldiff = a.length + y0 - b.length - x0
blif =diff b.length< 0
c += "-" * (bl+x0-y0-aldiff)
if al+y0 < bl+x0
elsif bl+x0diff <> al+y00
c += "-" * (bl+x0-y0-al)
d += "-" * ndiff
elsif bl+x0 < al+y0
d += "-" * (al+y0-x0-bl)
end
[c, d]
Anonymous user