Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
Delphi 7 Enterprise
|
Re: fuzzy matches via sql
5. Mai 2006, 19: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
|
|
Zitat
|