Levenshtein distance: Difference between revisions
Content added Content deleted
(→{{header|Common Lisp}}: Fix the formula for Levenshtein distance) |
Deadmarshal (talk | contribs) (Added Oberon-2) |
||
Line 3,699: | Line 3,699: | ||
echo levenshteinDistance("kitten","sitting") |
echo levenshteinDistance("kitten","sitting") |
||
echo levenshteinDistance("rosettacode","raisethysword")</syntaxhighlight> |
echo levenshteinDistance("rosettacode","raisethysword")</syntaxhighlight> |
||
=={{header|Oberon-2}}== |
|||
{{trans|Modula-2}} |
|||
<syntaxhighlight lang="oberon2">MODULE LevesteinDistance; |
|||
IMPORT Out,Strings; |
|||
PROCEDURE Levestein(s,t:ARRAY OF CHAR):LONGINT; |
|||
CONST |
|||
maxlen = 15; |
|||
VAR |
|||
d:ARRAY maxlen,maxlen OF LONGINT; |
|||
lens,lent,i,j:LONGINT; |
|||
PROCEDURE Min(a,b:LONGINT):LONGINT; |
|||
BEGIN |
|||
IF a < b THEN RETURN a ELSE RETURN b END |
|||
END Min; |
|||
BEGIN |
|||
lens := Strings.Length(s); |
|||
lent := Strings.Length(t); |
|||
IF lens = 0 THEN RETURN lent |
|||
ELSIF lent = 0 THEN RETURN lens |
|||
ELSE |
|||
FOR i := 0 TO lens DO d[i,0] := i END; |
|||
FOR j := 0 TO lent DO d[0,j] := j END; |
|||
FOR i := 1 TO lens DO |
|||
FOR j := 1 TO lent DO |
|||
IF s[i-1] = t[j-1] THEN |
|||
d[i,j] := d[i-1,j-1] |
|||
ELSE |
|||
d[i,j] := Min((d[i-1,j] + 1), |
|||
Min(d[i,j-1] + 1, d[i-1,j-1] + 1)); |
|||
END |
|||
END |
|||
END |
|||
END; |
|||
RETURN d[lens,lent]; |
|||
END Levestein; |
|||
PROCEDURE ShowDistance(s,t:ARRAY OF CHAR); |
|||
BEGIN |
|||
Out.String(s); |
|||
Out.String(" -> "); |
|||
Out.String(t); |
|||
Out.String(": "); |
|||
Out.Int(Levestein(s,t),0); |
|||
Out.Ln |
|||
END ShowDistance; |
|||
BEGIN |
|||
ShowDistance("kitten", "sitting"); |
|||
ShowDistance("rosettacode", "raisethysword"); |
|||
END LevesteinDistance. |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
<pre>kitten -> sitting: 3 |
|||
rosettacode -> raisethysword: 8 |
|||
</pre> |
|||
=={{header|Objeck}}== |
=={{header|Objeck}}== |