Thema: Delphi fuzzy matches via sql

Einzelnen Beitrag anzeigen

Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#22

Re: fuzzy matches via sql

  Alt 5. Mai 2006, 18:14
So ist es

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
Christian
  Mit Zitat antworten Zitat