AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi fuzzy matches via sql
Thema durchsuchen
Ansicht
Themen-Optionen

fuzzy matches via sql

Ein Thema von sancho1980 · begonnen am 30. Apr 2006 · letzter Beitrag vom 5. Mai 2006
Antwort Antwort
Seite 3 von 3     123   
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#21

Re: fuzzy matches via sql

  Alt 5. Mai 2006, 06:28
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.
Markus Kinzler
  Mit Zitat antworten Zitat
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, 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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 05:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz