| |
|
|
p.specht
| Der Jaro-Algorithmus es una Maß para gemeinsame Signo, el innerhalb de "nicht más que el halben Longitud el längeren Zeichenkette" mentira, bajo Berücksichtigung de Transpositionen (Verdrehungen). Winkler modifizierte esta Algorithmus, en el Faktum a berücksichtigen, dass Unterschiede al Anfang el Zeichenkette signifikanter son como Unterschiede al Ende el Zeichenkette. Jaro y Jaro-Winkler eignen se para el Vergleich kleinerer Zeichenketten como Wörter y Namen.
Für weitere Stringähnlichkeitsvergleiche sabe uno el Levenshtein-Algorithmus o Kölner Phonetik. Levenshtein zählt el número el Bearbeitungen (Einfügungen, Löschungen oder Substitutionen), el erforderlich son, una Zeichenkette en el otro a konvertieren. Damerau-Levenshtein es una modifizierte Versión, el Transpositionen auch como Einzelbearbeitung betrachtet. Obwohl el Edición el ganzzahlige Anzahl el Bearbeitungen es, kann esta standardisiert voluntad, en una Ähnlichkeitswert por una Formel a obtener
In el Praxis es wichtig, una Método a wählen, el el Art el Zeichenketten entspricht, el uno vergleichen voluntad. Manche Verfahre son viel aufwändiger como etwa el Berechnung uno phonetischen Vorab-Kodierung. Von el Geschwindigkeit her Es el Reihenfolge: 1. Jaro, 2. Jaro-Winkler, 3. Levenshtein, 4. Damerau-Levenshtein, wobei zwischen schnellstem y langsamsten Algorithmus una Faktor 2 a 3 liegt..
Título de la ventana "Jaro-Winkler String-Ähnlichkeit"
'Q: https://rosettacode.org/wiki/Jaro_distance#Pascal
'Thema: https://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance
'Dissertation [Christen 2006]: Systemvergleich Jaro - Levenshtein
'https://users.cecs.anu.edu.au/~Peter.Christen/publications/tr-cs-06-02.pdf
'(D) Demo translation, 2018-10-28 by P.Pájaro carpintero, Vienna/EU
'Ohne jede Gewähr! No warranty whatsoever!
CLS:font 2
imprimir format$("0.#######", JaroWinkler("DWAYNE","DUANE"))
imprimir format$("0.#######", JaroWinkler("MARTHA","MARHTA"))
imprimir format$("0.#######", JaroWinkler("DIXON","DICKSONX"))
imprimir format$("0.#######", JaroWinkler("JELLYFISH","SMELLYFISH"))
' Solloutput:
' 0.822222
' 0.944444
' 0.766667
' 0.896296
waitinput
FIN
Proc JaroWinkler :parámetros s1$,s2$
declarar l1&,l2&,match_distance&,matches&,i&,k&,trans&,gr&,kl&
declarar bs1&[255],bs2&[255]'max cadena length is here 255
l1&=len(s1$):l2&=len(s2$)
ifnot l1&:ifnot l2&:volver 1:más:volver 0:endif:endif
match_distance&= if(l1&>l2&,l1&,l2&)\2-1
' matches&=0
' trans&=0
Whileloop l1&:i&=&Loop
gr&=i&-match_distance&
kl&=i&+match_distance&
whileloop if(1>gr&,1,gr&),if(kl&<l2&,kl&,l2&):k&=&Loop
caso bs2&[k&]:continue
caso mid$(s1$,i&,1)<>mid$(s2$,k&,1):continue
bs1&[i&]=1:bs2&[k&]=1'1=true
inc matches&:romper
endwhile
endwhile
casenot matches&:volver 0
k&=1
whileloop l1&:i&=&Loop
casenot bs1&[i&]:continue
:whilenot bs2&[k&]:inc k&:endwhile
caso mid$(s1$,i&,1)<>mid$(s2$,k&,1):inc trans&
inc k&
endwhile
trans&=trans&\2
volver ((matches&/l1&)+(matches&/l2&)+((matches&-trans&)/matches&))/3
ENDPROC
|
|
|
| XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 29.05.2021 ▲ |
|
|
|