| |
|
|
p.specht
| qui Jaro-Algorithmus est un mesure pour gemeinsame marque, qui dedans de "nicht plus que qui halben Longueur qui längeren Zeichenkette" liegen, sous Berücksichtigung de Transpositionen (Verdrehungen). Winkler modifizierte cette Algorithmus, um cela Faktum trop berücksichtigen, dass Unterschiede am Anfang qui Zeichenkette signifikanter sommes comme Unterschiede am Ende qui Zeichenkette. Jaro et Jaro-Winkler eignen sich pour den comparaison kleinerer Zeichenketten comment Wörter et Namen.
Pour weitere Stringähnlichkeitsvergleiche kennt on den Levenshtein-Algorithmus ou bien qui Kölner Phonetik. Levenshtein zählt le nombre qui Bearbeitungen (Einfügungen, Löschungen ou bien Substitutionen), qui erforderlich sommes, um une Zeichenkette dans l'autre trop konvertieren. Damerau-Levenshtein ist une modifizierte Version, qui Transpositionen aussi comme Einzelbearbeitung betrachtet. quoique qui Ausgabe qui ganzzahlige Nombre de Bearbeitungen ist, peux cet standardisiert volonté, um une Ähnlichkeitswert par une Formel trop conservé
dans qui Praxis ist es important, une Methode trop choisir, qui qui Art qui Zeichenketten entspricht, qui on comparer veux. Manche Verfahre sommes viel aufwändiger comme etwa qui Berechnung einer phonetischen Vorab-Kodierung. de qui Geschwindigkeit her ist qui Reihenfolge: 1. Jaro, 2. Jaro-Winkler, 3. Levenshtein, 4. Damerau-Levenshtein, wobei entre schnellstem et langsamsten Algorithmus un facteur 2 jusqu'à 3 liegt..
Titre de la fenêtre "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.Specht, Vienna/EU
'sans chacun Gewähr! No warranty whatsoever!
CLS:font 2
imprimer format$("0.#######", JaroWinkler("DWAYNE","DUANE"))
imprimer format$("0.#######", JaroWinkler("MARTHA","MARHTA"))
imprimer format$("0.#######", JaroWinkler("DIXON","DICKSONX"))
imprimer format$("0.#######", JaroWinkler("JELLYFISH","SMELLYFISH"))
' Solloutput:
' 0.822222
' 0.944444
' 0.766667
' 0.896296
waitinput
FIN
Proc JaroWinkler :parameters s1$,s2$
declare l1&,l2&,match_distance&,matches&,i&,k&,trans&,gr&,kl&
declare bs1&[255],bs2&[255]'max string length is here 255
l1&=len(s1$):l2&=len(s2$)
ifnot l1&:ifnot l2&:return 1:d'autre:return 0:endif:endif
match_distance&= si(l1&>l2&,l1&,l2&)\2-1
' matches&=0
' trans&=0
Whileloop l1&:i&=&Boucle
gr&=i&-match_distance&
kl&=i&+match_distance&
whileloop si(1>gr&,1,gr&),si(kl&<l2&,kl&,l2&):k&=&Boucle
cas bs2&[k&]:continue
cas mid$(s1$,i&,1)<>mid$(s2$,k&,1):continue
bs1&[i&]=1:bs2&[k&]=1'1=true
inc matches&:pause
endwhile
endwhile
casenot matches&:return 0
k&=1
whileloop l1&:i&=&Boucle
casenot bs1&[i&]:continue
:whilenot bs2&[k&]:inc k&:endwhile
cas mid$(s1$,i&,1)<>mid$(s2$,k&,1):inc trans&
inc k&
endwhile
trans&=trans&\2
return ((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 ▲ |
|
|
|