45 lines
1.3 KiB
Text
45 lines
1.3 KiB
Text
PRINT "Jaro similarity between the two strings:"
|
|
PROCDescribeJaro("MARTHA", "MARHTA")
|
|
PROCDescribeJaro("DIXON", "DICKSONX")
|
|
PROCDescribeJaro("JELLYFISH", "SMELLYFISH")
|
|
PROCDescribeJaro("DWAYNE", "DUANE")
|
|
PROCDescribeJaro("a", "b")
|
|
PROCDescribeJaro("", "")
|
|
END
|
|
|
|
DEF FNMax(a, b)=(a + b + ABS(a - b)) / 2
|
|
DEF FNMin(a, b)=(a + b - ABS(a - b)) / 2
|
|
|
|
DEF PROCDescribeJaro(word1$, word2$)
|
|
LOCAL d%, i%, j%, k%, l1%, l2%, m%, t%
|
|
|
|
PRINT " '" word1$ "' and '" word2$ "'" TAB(30) "= ";
|
|
IF word1$ == "" IF word2$ == "" PRINT;1 : ENDPROC
|
|
l1%=LENword1$
|
|
l2%=LENword2$
|
|
IF l1% < l2% SWAP l1%, l2% SWAP word1$, word2$
|
|
|
|
d%=l1% / 2 - 1
|
|
j%=1
|
|
FOR i%=1 TO l2%
|
|
IF MID$(word2$, i%, 1) == MID$(word1$, j%, 1) THEN
|
|
m%+=1
|
|
MID$(word1$, j%)=" "
|
|
ELSE
|
|
FOR k%=FNMax(1, i% - d%) TO FNMin(l1%, i% + d%)
|
|
IF MID$(word2$, i%, 1) == MID$(word1$, k%, 1) THEN
|
|
t%+=1
|
|
m%+=1
|
|
MID$(word1$, k%)=" "
|
|
IF k% > j% j%=k%
|
|
ENDIF
|
|
NEXT
|
|
ENDIF
|
|
j%+=1
|
|
NEXT
|
|
IF m% == 0 THEN
|
|
PRINT;0
|
|
ELSE
|
|
PRINT;(m% / l2% + m% / l1% + ((m% - (t% >> 1)) / m%)) / 3
|
|
ENDIF
|
|
ENDPROC
|