40 lines
1.4 KiB
Text
40 lines
1.4 KiB
Text
set names to ["Aschraft","Ashcroft","DiBenedetto","Euler","Gauss","Ghosh","Gutierrez",
|
|
"Heilbronn","Hilbert","Honeyman","Jackson","Lee","LeGrand","Lissajous","Lloyd",
|
|
"Moses","Pfister","Robert","Rupert","Rubin","Tymczak","VanDeusen","Van de Graaff","Wheaton"]
|
|
|
|
repeat with each name in names
|
|
put !"[[name]] --> [[name's soundex]]"
|
|
end repeat
|
|
|
|
to handle soundex of aName
|
|
delete space from aName -- remove spaces
|
|
put the first character of aName into soundex
|
|
replace every occurrence of <{letter:char},{:letter}> with "{:letter}" in aName -- collapse double letters
|
|
delete "H" from aName
|
|
delete "W" from aName
|
|
|
|
set prevCode to 0
|
|
repeat with each character ch in aName
|
|
if ch is in ...
|
|
... "BFPV" then set code to 1
|
|
... "CGJKQSXZ" then set code to 2
|
|
... "DT" then set code to 3
|
|
... "L" then set code to 4
|
|
... "MN" then set code to 5
|
|
... "R" then set code to 6
|
|
... else set code to 0
|
|
end if
|
|
if code isn't 0 and the counter > 1 and code isn't prevCode then put code after soundex
|
|
put code into prevCode
|
|
end repeat
|
|
set soundex to the first 4 chars of (soundex & "000") -- fill in with 0's as needed
|
|
|
|
set prefix to <("Van" or "Con" or "De" or "Di" or "La" or "Le") followed by a capital letter>
|
|
if aName begins with prefix then
|
|
put aName into nameWithoutPrefix
|
|
delete the first occurrence of prefix in nameWithoutPrefix
|
|
return [soundex, soundex of nameWithoutPrefix]
|
|
end if
|
|
|
|
return soundex
|
|
end soundex
|