"""Soundex algorithmThis program is part of "Dive Into Python", a free Python book forexperienced programmers. Visit http://diveintopython.org/ for thelatest version."""__author__="Mark Pilgrim (mark@diveintopython.org)"__version__="$Revision: 1.5 $"__date__="$Date: 2004/05/11 19:11:21 $"__copyright__="Copyright (c) 2004 Mark Pilgrim"__license__="Python"importstringallChar=string.uppercase+string.lowercasecharToSoundex=string.maketrans(allChar,"91239129922455912623919292"*2)defsoundex(source):"convert string to Soundex equivalent"# Soundex requirements:# source string must be at least 1 character# and must consist entirely of lettersif(notsource)or(notsource.isalpha()):return"0000"# Soundex algorithm:# 1. make first character uppercase# 2. translate all other characters to Soundex digitsdigits=source[0].upper()+source[1:].translate(charToSoundex)# 3. remove consecutive duplicatesdigits2=digits[0]fordindigits[1:]:ifdigits2[-1]!=d:digits2+=d# 4. remove all "9"s# 5. pad end with "0"s to 4 charactersreturn(digits2.replace('9','')+'000')[:4]if__name__=='__main__':importsysifsys.argv[1:]:printsoundex(sys.argv[1])else:fromtimeitimportTimernames=('Woo','Pilgrim','Flingjingwaller')fornameinnames:statement="soundex('%s')"%namet=Timer(statement,"from __main__ import soundex")printname.ljust(15),soundex(name),min(t.repeat())