Einzelnen Beitrag anzeigen

Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
655 Beiträge
 
Delphi 12 Athens
 
#4

Re: Gesucht: Funktion zur Identifizierung ähnlicher Worte

  Alt 23. Feb 2010, 09:33
Du könntest auch mal schauen, ob vielleicht die Levenshtein-Distanz etwas für dich wäre. Die paar Zeilen C-Code lassen sich ja schnell nach Delphi übertragen.

Bis denn
Bommel

Edit: Ich wusste doch, ich hatte das schon mal irgendwann gemacht...

Delphi-Quellcode:
function Levenshtein (string1, string2: string): integer;

var matrix: array of array of integer;
    i,j,cost: integer;
    compArray: array[0..2] of integer;

begin
  SetLength(matrix,length(string1)+1,length(string2)+1);

  for I := 0 to length(string1) do
    matrix[i,0]:=i;

  for j := 0 to length(string2) do
    matrix[0,j]:=j;

  for I := 1 to length(string1) do
    for j := 1 to length(string2) do begin
      if string1[i]=string2[j] then
        cost:=0
      else
        cost:=1;

      compArray[0]:=matrix[i-1,j]+1;
      compArray[1]:=matrix[i,j-1]+1;
      compArray[2]:=matrix[i-1,j-1]+cost;
      matrix[i,j]:=MinIntValue(compArray);
    end;
  Result:=matrix[length(string1),length(string2)];
end;
Um ein sinnvolles Ergebnis zu bekommen, könntest du dann das Ergebnis der Funktion noch in Relation zur Anzahl der Zeichen eines der Strings setzen und hättest dann sowas wie ein prozentuale Abweichung.

Edit2: Hier in der CodeLib gibt es auch noch eine Umsetzung.
  Mit Zitat antworten Zitat