104 lines
5.4 KiB
Plaintext
104 lines
5.4 KiB
Plaintext
class Soundex
|
|
|
|
method get_soundex(in_) static
|
|
in = in_.upper()
|
|
old_alphabet= 'AEIOUYHWBFPVCGJKQSXZDTLMNR'
|
|
new_alphabet= '@@@@@@**111122222222334556'
|
|
word=''
|
|
loop i=1 for in.length()
|
|
tmp_=in.substr(i, 1) /*obtain a character from word*/
|
|
if tmp_.datatype('M') then word=word||tmp_
|
|
end
|
|
|
|
value=word.strip.left(1) /*1st character is left alone.*/
|
|
word=word.translate(new_alphabet, old_alphabet) /*define the current word. */
|
|
prev=value.translate(new_alphabet, old_alphabet) /* " " previous " */
|
|
|
|
loop j=2 to word.length() /*process remainder of word. */
|
|
q=word.substr(j, 1)
|
|
if q\==prev & q.datatype('W') then do
|
|
value=value || q; prev=q
|
|
end
|
|
else if q=='@' then prev=q
|
|
end /*j*/
|
|
|
|
return value.left(4,0) /*padded value with zeroes. */
|
|
|
|
method main(args=String[]) static
|
|
|
|
test=''; result_=''
|
|
test['1']= "12346" ; result_['1']= '0000'
|
|
test['4']= "4-H" ; result_['4']= 'H000'
|
|
test['11']= "Ashcraft" ; result_['11']= 'A261'
|
|
test['12']= "Ashcroft" ; result_['12']= 'A261'
|
|
test['18']= "auerbach" ; result_['18']= 'A612'
|
|
test['20']= "Baragwanath" ; result_['20']= 'B625'
|
|
test['22']= "bar" ; result_['22']= 'B600'
|
|
test['23']= "barre" ; result_['23']= 'B600'
|
|
test['20']= "Baragwanath" ; result_['20']= 'B625'
|
|
test['28']= "Burroughs" ; result_['28']= 'B620'
|
|
test['29']= "Burrows" ; result_['29']= 'B620'
|
|
test['30']= "C.I.A." ; result_['30']= 'C000'
|
|
test['37']= "coöp" ; result_['37']= 'C100'
|
|
test['43']= "D-day" ; result_['43']= 'D000'
|
|
test['44']= "d jay" ; result_['44']= 'D200'
|
|
test['45']= "de la Rosa" ; result_['45']= 'D462'
|
|
test['46']= "Donnell" ; result_['46']= 'D540'
|
|
test['47']= "Dracula" ; result_['47']= 'D624'
|
|
test['48']= "Drakula" ; result_['48']= 'D624'
|
|
test['49']= "Du Pont" ; result_['49']= 'D153'
|
|
test['50']= "Ekzampul" ; result_['50']= 'E251'
|
|
test['51']= "example" ; result_['51']= 'E251'
|
|
test['55']= "Ellery" ; result_['55']= 'E460'
|
|
test['59']= "Euler" ; result_['59']= 'E460'
|
|
test['60']= "F.B.I." ; result_['60']= 'F000'
|
|
test['70']= "Gauss" ; result_['70']= 'G200'
|
|
test['71']= "Ghosh" ; result_['71']= 'G200'
|
|
test['72']= "Gutierrez" ; result_['72']= 'G362'
|
|
test['80']= "he" ; result_['80']= 'H000'
|
|
test['81']= "Heilbronn" ; result_['81']= 'H416'
|
|
test['84']= "Hilbert" ; result_['84']= 'H416'
|
|
test['100']= "Jackson" ; result_['100']= 'J250'
|
|
test['104']= "Johnny" ; result_['104']= 'J500'
|
|
test['105']= "Jonny" ; result_['105']= 'J500'
|
|
test['110']= "Kant" ; result_['110']= 'K530'
|
|
test['116']= "Knuth" ; result_['116']= 'K530'
|
|
test['120']= "Ladd" ; result_['120']= 'L300'
|
|
test['124']= "Llyod" ; result_['124']= 'L300'
|
|
test['125']= "Lee" ; result_['125']= 'L000'
|
|
test['126']= "Lissajous" ; result_['126']= 'L222'
|
|
test['128']= "Lukasiewicz" ; result_['128']= 'L222'
|
|
test['130']= "naïve" ; result_['130']= 'N100'
|
|
test['141']= "Miller" ; result_['141']= 'M460'
|
|
test['143']= "Moses" ; result_['143']= 'M220'
|
|
test['146']= "Moskowitz" ; result_['146']= 'M232'
|
|
test['147']= "Moskovitz" ; result_['147']= 'M213'
|
|
test['150']= "O'Conner" ; result_['150']= 'O256'
|
|
test['151']= "O'Connor" ; result_['151']= 'O256'
|
|
test['152']= "O'Hara" ; result_['152']= 'O600'
|
|
test['153']= "O'Mally" ; result_['153']= 'O540'
|
|
test['161']= "Peters" ; result_['161']= 'P362'
|
|
test['162']= "Peterson" ; result_['162']= 'P362'
|
|
test['165']= "Pfister" ; result_['165']= 'P236'
|
|
test['180']= "R2-D2" ; result_['180']= 'R300'
|
|
test['182']= "rÄ≈sumÅ∙" ; result_['182']= 'R250'
|
|
test['184']= "Robert" ; result_['184']= 'R163'
|
|
test['185']= "Rupert" ; result_['185']= 'R163'
|
|
test['187']= "Rubin" ; result_['187']= 'R150'
|
|
test['191']= "Soundex" ; result_['191']= 'S532'
|
|
test['192']= "sownteks" ; result_['192']= 'S532'
|
|
test['199']= "Swhgler" ; result_['199']= 'S460'
|
|
test['202']= "'til" ; result_['202']= 'T400'
|
|
test['208']= "Tymczak" ; result_['208']= 'T522'
|
|
test['216']= "Uhrbach" ; result_['216']= 'U612'
|
|
test['221']= "Van de Graaff" ; result_['221']= 'V532'
|
|
test['222']= "VanDeusen" ; result_['222']= 'V532'
|
|
test['230']= "Washington" ; result_['230']= 'W252'
|
|
test['233']= "Wheaton" ; result_['233']= 'W350'
|
|
test['234']= "Williams" ; result_['234']= 'W452'
|
|
test['236']= "Woolcock" ; result_['236']= 'W422'
|
|
|
|
loop i over test
|
|
say test[i].left(10) get_soundex(test[i]) '=' result_[i]
|
|
end
|