Was soll das denn leisten? Soll das erkennen, dass Meier so ähnlich wie Maja klingt? Oder Meyer und Maier finden?
tba hat geschrieben:schau dir mal die Kontaktsuche im Standard an.
die macht sowas in der Art.
(ich weiss aber nicht, ob auch schon in der Version 3.7)
bin mir da relativ sicher, dass das die Standard suche nicht macht!
martinst hat geschrieben:bin mir da relativ sicher, dass das die Standard suche nicht macht!
Da liegst Du aber falsch.
Genau das macht diese Funktion.
Meier findet Meyer, Mayer, Maier etc.
Gruss
- Code: Alles auswählen
Soundex(Text : Text[1024]) Result : Text[10]
KölnerPhonetik(Text : Text[1024]) Result : Text[1024]
martinst hat geschrieben:Genau das.
navytom hat geschrieben:Ansonsten schaue ich auch mal gerne in die Kontaktsuche. Ab welcher Version? Ich geh mal von 4.0 aus.
martinst hat geschrieben:Das ist kein SQL-Feature oder sonst was ähnliches.
Die Kontaktsuche in NAV findet NATIV und SQL die Namen phonetisch.
meier findet meier,meyer,maier,mayer etc.
CASE DuplSearchStringSetup.Field OF
DuplSearchStringSetup.Field::Name:
DuplContSearchString."Search String" :=
ComposeIndexString(Cont.Name,DuplSearchStringSetup."Part of Field",DuplSearchStringSetup.Length);
ComposeIndexString(InString : Text[260];Part : 'First,Last';ChrToCopy : Integer) : Text[260]
InString := DELCHR(InString,'=',' +"&/,.;:-_(){}#!ÂŁ$\');
IF STRLEN(InString) < ChrToCopy THEN
ChrToCopy := STRLEN(InString);
IF ChrToCopy > 0 THEN
IF Part = Part::First THEN
InString := COPYSTR(InString,1,ChrToCopy)
ELSE
InString := COPYSTR(InString,STRLEN(InString)-ChrToCopy+1,ChrToCopy);
EXIT(UPPERCASE(InString));
DuplContSearchString2.SETCURRENTKEY(Field,"Part of Field","Search String");
DuplContSearchString2.SETRANGE(Field,DuplContSearchString.Field);
DuplContSearchString2.SETRANGE("Part of Field",DuplContSearchString."Part of Field");
DuplContSearchString2.SETRANGE("Search String",DuplContSearchString."Search String");
DuplContSearchString2.SETFILTER("Contact Company No.",'<>%1',DuplContSearchString."Contact Company No.");
Ich habe das GefĂĽhl, hier wird gerade die Dubletten-PrĂĽfung mit der Kontakt-Suche verwechselt.
McClane hat geschrieben:Ein Algorithmus, der auch weg gelassene oder Buchstabendreher findet und somit die Unterschiedlichkeit zweier Wörter bewerten kann, ist der von Levenshtein (http://www.levenshtein.de/). Ist recht leicht in Nav umzusetzen, braucht aber länger als die Standard-Dublettensuche. Dafür liefert er nach meiner Erfahrung bessere Ergebnisse.
LevenshteinDistance(SourceText : Text[50];TargetText : Text[50]) : Integer
// > TL6.00:09 >>>
// Based on http://de.wikipedia.org/wiki/Levenshtein-Distanz#Algorithmus
FOR I := 0 TO STRLEN(SourceText) DO
Distance[I+1,1] := I;
FOR J := 0 TO STRLEN(TargetText) DO
Distance[1,J+1] := J;
FOR I := 1 TO STRLEN(SourceText) DO
FOR J := 1 TO STRLEN(TargetText) DO BEGIN
IF SourceText[I] = TargetText[J] THEN
Cost := 0
ELSE
Cost := 1;
Distance[I+1,J+1] := Min(Distance[I,J+1] + 1,Min(Distance[I+1,J] + 1,Distance[I,J] + Cost));
END;
EXIT(Distance[STRLEN(SourceText) + 1,STRLEN(TargetText) + 1]);
// < TL6.00:09 <<<
DamerauLevenshteinDistance(SourceText : Text[50];TargetText : Text[50]) : Integer
// > TL6.00:09 >>>
// Based on http://de.wikipedia.org/wiki/Levenshtein-Distanz#Damerau-Levenshtein-Distanz
FOR I := 0 TO STRLEN(SourceText) DO
Distance[I+1,1] := I;
FOR J := 0 TO STRLEN(TargetText) DO
Distance[1,J+1] := J;
FOR I := 1 TO STRLEN(SourceText) DO
FOR J := 1 TO STRLEN(TargetText) DO BEGIN
IF SourceText[I] = TargetText[J] THEN
Cost := 0
ELSE
Cost := 1;
Distance[I+1,J+1] := Min(Distance[I,J+1] + 1,Min(Distance[I+1,J] + 1,Distance[I,J] + Cost));
IF (I > 1) AND (J > 1) THEN
IF (SourceText[I] = TargetText[J-1]) AND (SourceText[I-1] = TargetText[J]) THEN
Distance[I+1,J+1] := Min(Distance[I+1,J+1],Distance[I-1,J-1] + Cost);
END;
EXIT(Distance[STRLEN(SourceText) + 1,STRLEN(TargetText) + 1]);
// < TL6.00:09 <<<
Min(Int1 : Integer;Int2 : Integer) : Integer
// > TL6.00:09 >>>
IF Int1 < Int2 THEN
EXIT(Int1)
ELSE
EXIT(Int2);
// < TL6.00:09 <<<
McClane hat geschrieben:Sieht irgendwie aus wie meiner .. los sag: wo steht die Kamera?
mikka hat geschrieben:Wie du hast den schon?
Und nicht gepostet
Ăśberrascht mich nicht, denn ich habe den Code 1:1 ĂĽbernommen und an die C/AL-Konventionen angepasst.McClane hat geschrieben:Sieht irgendwie aus wie meiner
Glaubst du wirklich, das kleine Loch in der Wand stammt von einem ehemaligen Nagel?McClane hat geschrieben: .. los sag: wo steht die Kamera?
Beispielsweise ist die Levenshtein-Distanz zwischen „Tier“ zu „Tor“ 2. Eine mögliche Folge von 2 Operationen ist:
1.Tier
2.Toer (Ersetze i durch o)
3.Tor (Lösche e)
McClane hat geschrieben:Und was machst du bei Worten wie Soest? Das wäre nicht gleich Söst. AEG ist nicht ÄG.
McClane hat geschrieben:Außerdem ist es dir doch überlassen, ab wann du von einer Dublette ausgehst. Das kann immer ein fester Wert sein, genauso aber eine Abweichung in Abhängigkeit der Länge der Wörter.
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast