Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi fuzzy matches via sql (https://www.delphipraxis.net/68502-fuzzy-matches-via-sql.html)

mkinzler 5. Mai 2006 05:28

Re: fuzzy matches via sql
 
zu 2.) Es wird berechnet in wie vielen Schritten durch Hinzufügen, Entferen oder Ersetzen ein String zu einem anderen umgeformt werden kann.

z.B. Von Hans -> Dampf

Hans
Dans 1 Ersetzen
Damp 2 Ersetzen
Dampf 3 Hinzufügen

1.) Zurückgeliefert wird die Anzahl der Schritte, Kosten sind ein Gewichtsfaktor um verschiedene Umwandlungsformen verschieden zu bewerten.

Kedariodakon 5. Mai 2006 18:14

Re: fuzzy matches via sql
 
So ist es :wink:

Hier habt ihr eine Funktion, bei welcher man die verschiedenen Kosten angeben kann, oder man benutzt sie ohne Angaben wie eine normale.

Delphi-Quellcode:
Function WeightedLevenshteinDistance( Const FromStr, ToStr: String; Const CostCase: Integer = 0;
  Const CostSubst: Integer = 1; Const CostIns: Integer = 1; Const CostDel: Integer = 1 ): Integer;
Var Costs: Array Of Array Of Integer;
    Len1:  Integer;
    Len2:  Integer;
    i1:    Integer;
    i2:    Integer;
    Cost:  Integer;
Begin
  Len1  := Length( FromStr );
  Len2  := Length( ToStr  );
  Try
    SetLength( Costs, Len2 + 1, Len1 + 1 );
    For i2 := 0 To Len1 Do Costs[ 0, i2 ] := i2 * CostDel;
    For i1 := 1 To Len2 Do Begin
      Costs[ i1, 0 ] := i1 * CostIns;                                      
      For i2 := 1 To Len1 Do Begin
        If     ToStr[ i1 ]             = FromStr[ i2 ]              Then Cost := 0
        Else If UpperCase( ToStr[ i1 ] ) = UpperCase( FromStr[ i2 ] ) Then Cost := CostCase      
        Else                                                               Cost := CostSubst;
        Costs[ i1, i2 ] := Min( Min( Costs[ i1 - 1, i2     ] + CostIns,
                                      Costs[ i1    , i2 - 1 ] + CostDel ),
                                 Costs[ i1 - 1, i2 - 1 ] + Cost );
      End;
    End;
    Result := Costs[ Len2, Len1 ];
  Finally
    Finalize( Costs );
  End;
End;
Bye


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:31 Uhr.
Seite 3 von 3     123   

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