AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Ähnlichkeitssuche: Fuzzy-Search-Unit???

Ein Thema von romber · begonnen am 17. Apr 2005 · letzter Beitrag vom 19. Apr 2005
 
Benutzerbild von atreju2oo0
atreju2oo0

Registriert seit: 5. Dez 2003
Ort: Berlin
289 Beiträge
 
Delphi 6 Enterprise
 
#17

Re: Ähnlichkeitssuche: Fuzzy-Search-Unit???

  Alt 18. Apr 2005, 12:26
Diese Funktionen benutze ich dafür...
Läuft im Endeffekt aufs selbe hinaus!
Wo ich die herhabe weiß ich leider nciht mehr genau, aber hier im DP-Forum wurde mir nen Link gegeben...


Delphi-Quellcode:
var
  FiR0 : integer;
  FiP0 : integer;
  FiQ0 : integer;


procedure LevenshteinPQR(p,q,r:integer);
begin
  FiP0 := p;
  FiQ0 := q;
  FiR0 := r;
end;

function LevenshteinDistance(const sString,sPattern: String): Integer;
const
  MAX_SIZE = 50;
var
  aiDistance: array [0..MAX_SIZE,0..MAX_SIZE] of Integer;
  i,j,
  iP,iQ,iR,iPP,
  iStringLength,
  iPatternLength,
  iMaxI,iMaxJ : Integer;
  chChar : Char;

  function Min(X,Y,Z: Integer): Integer;
  begin
    if (X<Y) then
      Result:=X
    else
      Result:=Y;
    if (Result>Z) then
      Result:=Z;
  end; {Min}

begin
  iStringLength:=length(sString);
  if (iStringLength>MAX_SIZE) then
    iMaxI:=MAX_SIZE
  else
    iMaxI:=iStringLength;
  iPatternLength:=length(sPattern);
  if (iPatternLength>MAX_SIZE) then
    iMaxJ:=MAX_SIZE
  else
    iMaxJ:=iPatternLength;

  aiDistance[0, 0]:=0;
  for i:=1 to iMaxI do
    aiDistance[i, 0]:=aiDistance[i-1, 0]+FiR0;
  for j:=1 to iMaxJ do begin
    chChar:=sPattern[j];
    if ((chChar='*') or (chChar='?')) then
      iP:=0
    else
      iP:=FiP0;
    if (chChar='*') then
      iQ:=0
    else
      iQ:=FiQ0;
    if (chChar='*') then
      iR:=0
    else
      iR:=FiR0;

    aiDistance[0, j]:=aiDistance[0, j-1]+iQ;

    for i:=1 to iMaxI do begin
      if (sString[i]=sPattern[j]) then
        iPP:=0
      else
        iPP:=iP;
      {*** aiDistance[i,j] := Minimum of 3 values ***}
      aiDistance[i,j]:=Min(aiDistance[i-1, j-1]+iPP,
                           aiDistance[i, j-1] +iQ,
                           aiDistance[i-1, j] +iR);
    end;
  end;
  Result:=aiDistance[iMaxI, iMaxJ];
end;

Aufrufen muss man erst die "Init"
mit LevenshteinPQR(1, 1, 1);

und dann kannste mit
LevenshteinDistance(String1,string2)<=fuzzyEntfern ung
die Entfernung der Stirngs herausbekommen
Thomas
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz