Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Library: Algorithmen (https://www.delphipraxis.net/28-library-algorithmen/)
-   -   Delphi Prozentualer Unterschied zweier Strings ermitteln (https://www.delphipraxis.net/58797-prozentualer-unterschied-zweier-strings-ermitteln.html)

Matze 12. Dez 2005 21:55


Prozentualer Unterschied zweier Strings ermitteln
 
Volker hat hier einen Code gepostet, der den Algorithmus der Levenshtein-Distanz verarbeitet. Falls euch das Vorgehen bzw. das Thema allgemein näher interessiert, findet ihr bei Wikipedia einen schönen Artikel darüber.

Delphi-Quellcode:
function Levenshtein(const str1, str2: string): integer;
var
  delta: array of integer;
  len1, len2: integer;  // length of str1, str2
  idx1, idx2: integer;  // index into str1, str2
  clast, cnew: integer; // last/next cost
begin
  len1 := Length(str1);
  len2 := Length(str2);
  if (len1 = 0) and (len2 = 0) then
    Result := 0
  else if (len1 = 0) or (len2 = 0) then
    Result := 100
  else
  begin
    SetLength(delta, len2 + 1);

    for idx2 := 0 to len2 do
      delta[idx2] := idx2;

    for idx1 := 1 to len1 do
    begin
      clast := delta[0];
      delta[0] := idx1;

      for idx2 := 1 to len2 do
      begin
        cnew := clast + Ord(str1[idx1] <> str2[idx2]);
        if delta[idx2] + 1 < cnew then // <-- ist noch der alte!
          cnew := delta[idx2] + 1;
        if delta[idx2 - 1] + 1 < cnew then
          cnew := delta[idx2 - 1] + 1;
        clast := delta[idx2];
        delta[idx2] := cnew;
      end;
    end;

    Result := delta[len2] * 100 div len2;
    (* Alternativ:
    if len2 > len1 then
      Result := delta[len2] * 100 div len2
    else
      Result := delta[len2] * 100 div len1;
    *)
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz