""" Converts a surname into its soundex equivalent """ #Changelog # 5 May 2006 # v0.1 - verbatim copy of Mark Pilgrim's Code in "Drive into Python" __author__ = "Eric Mesa" __version__ = "v0.1" __license__ = "GNU GPL v2" __copyright__ = "(c)2006 Eric Mesa" import string, re allChar = string.uppercase + string.lowercase charToSoundex = string.maketrans(allChar, "91239129922455912623919292" * 2) isOnlyChars = re.compile('^[A-Za-z]+$').search def soundex(source): if not isOnlyChars(source): return "0000" digits = source[0].upper() + source[1:].translate(charToSoundex) digits2 = digits[0] for d in digits[1:]: if digits2[-1] != d: digits2 += d digits3 = re.sub('9', '', digits2) while len(digits3) < 4: digits3 += "0" return digits3[:4] if __name__ == '__main__': from timeit import Timer names = ('Woo', 'Pilgrim', 'Flingjingwaller', 'Mesa') for name in names: statement = "soundex('%s')" % name t = Timer(statement, "from __main__ import soundex") print name.ljust(15), soundex(name), t.timeit()