Jump to content

Levenshtein distance: Difference between revisions

m
(Added Frink)
Line 265:
every process(!&input)
end
 
procedure process(s)
s ? (s1 := tab(upto(' \t')), s2 := (tab(many(' \t')), tab(0))) | fail
s ? {
write("'",s1,"' -> '",s2,"' = ", levenshtein(s1,s2))
s1 := tab(upto(' \t')) | fail
s2 := (tab(many(' \t')), tab(0))
write("'",s1,"' -> '",s2,"' = ", levenshtein(s1,s2))
}
end
 
procedure levenshtein(s, t)
if (n := *s+1) = 01 then return *t
if (m := *t+1) = 01 then return *s
n := *s+1
m := *t+1
every !(d := list(n,0)) := list(m, 0)
every i := 1 to max(n,m) do d[i,1] := d[1,i] := i
Line 285 ⟶ 280:
min(d[iM1,j], d[i,jM1:=j-1],
d[iM1,jM1] + if s_i == t[jM1] then -1 else 0) + 1
 
return d[n,m]-1
end</lang>
Cookies help us deliver our services. By using our services, you agree to our use of cookies.