![]() |
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. |
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:
Bye
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:31 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