Wiki Home

Improve Soundex

(Updated: 2005.02.14 07:04:07 AM)
Namespace: VFP
If you need a quick way to improve your soundex matches, just use this small function instead of directly calling Soundex.

?Soundex("Cease") = Soundex("Sees")
?SoundsLike("Cease") = SoundsLike("Sees")

?Soundex("Nite") = Soundex("Night")
?SoundsLike("Nite") = SoundsLike("Night")

?Soundex("Kitchen") = Soundex("Kichen")
?SoundsLike("Kitchen") = SoundsLike("Kichen")

****************************
FUNCTION SoundsLike(tcWord)
****************************
	LOCAL lcTwoLetters, lcOneLetter
	tcWord = UPPER(ALLTRIM(tcWord))
	lcOneLetter = LEFT(tcWord,1)
	lcTwoLetters = LEFT(tcWord,2)
	DO CASE
	CASE lcTwoLetters = "PS"
		tcWord = STUFF(tcWord,1,2,"S")
	CASE lcTwoLetters = "PF"
		tcWord = STUFF(tcWord,1,2,"F")
	CASE lcOneLetter $ "AI"
		IF RIGHT(lcTwoLetters,1) $ "AEIO"
			tcWord = STUFF(tcWord,1,2,"E")
		ENDIF
	CASE lcOneLetter = "X"
		tcWord = STUFF(tcWord,1,1,"Z")
	ENDCASE

	tcWord = STRTRAN(tcWord, "DG", "G")
	tcWord = STRTRAN(tcWord, "GH", "H")
	tcWord = STRTRAN(tcWord, "GN", "N")
	tcWord = STRTRAN(tcWord, "KN", "N")
	tcWord = STRTRAN(tcWord, "KH", "K")
	tcWord = STRTRAN(tcWord, "PH", "F")
	tcWord = STRTRAN(tcWord, "MB", "M")
	tcWord = STRTRAN(tcWord, "CE", "S")
	tcWord = STRTRAN(tcWord, "CI", "SI")
	tcWord = STRTRAN(tcWord, "C", "K")
	tcWord = STRTRAN(tcWord, "KH", "CH")
	tcWord = STRTRAN(tcWord, "TCH", "CH")
	tcWord = STRTRAN(tcWord, "WR", "R")
	tcWord = STRTRAN(tcWord, "TION", "SHN")
	RETURN (SOUNDEX(tcWord))

ENDFUNC


-- Craig SBoyd
Category Code Samples