[melbourne-pug] Fun with phononyms

martin schweitzer schweitzer.ubiquitous at gmail.com
Mon Aug 17 04:14:36 CEST 2009


I hope this is not an abuse of this mailing list - and hopefully it will
encourage the discussion and use of Python :-)

A workmate asked me the other day what name I would give to two words that
come up from the same numbers using predictive text on a mobile phone.  Eg.
if you type 4,6,6,3 it comes up as either HOME or GOOD.  He came up with the
word 'Nokianym' and someone else came up with Phononym.  A quick google
search revealed that phononym is already well known (eg.
http://ask.metafilter.com/29392/What-are-words-spelt-the-same-on-phone-keypads-called
).

Anyway, I wrote a quick program to find all phononyms in a dictionary.  It
was a first attempt and I am sure it can be done more elegantly - but I
thought I would post my program here and people may be interested in posting
improvements...

Regards,
Martin

#!/opt/local/bin/python

# My python v3.0 hack...
def print3(text): print text

# A list of words (that are legal in scrabble)...
dictionary = 'sowpods.txt'

nokia = {'a':2, 'b':2, 'c':2,
       'd':3, 'e':3, 'f':3,
       'g':4, 'h':4, 'i':4,
       'j':5, 'k':5, 'l':5,
       'm':6, 'n':6, 'o':6,
       'p':7, 'q':7, 'r':7, 's':7,
       't':8, 'u':8, 'v':8,
       'w':9, 'x':9, 'y':9, 'z':9
       }

# Yes, the following function could be shortened, but I have
# gone for reading comprehension over list comprehension...
def get_val(word):
    result = 0
    word = word.lower()
    for c in word:
        if nokia.has_key(c):
            result = result * 10 + nokia[c]
    return result

phononyms = {}
for word in open(dictionary):
    word = word.rstrip('\n\r')

    val = get_val(word)
    if (not phononyms.has_key(val)):
        phononyms[val] = []
    phononyms[val].append(word)

[print3(phononyms[val])
    for val in phononyms.keys()
        if len(phononyms[val]) > 1]
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/melbourne-pug/attachments/20090817/e374ae3b/attachment.htm>


More information about the melbourne-pug mailing list