"""This module contains code from Think Python by Allen B. Downey http://thinkpython.com Copyright 2012 Allen B. Downey License: GNU GPLv3 http://www.gnu.org/licenses/gpl.html """ from pronounce import read_dictionary def make_word_dict(): """Read the words in words.txt and return a dictionary that contains the words as keys""" d = dict() fin = open('words.txt') for line in fin: word = line.strip().lower() d[word] = word return d def homophones(a, b, phonetic): """Checks if words two can be pronounced the same way. If either word is not in the pronouncing dictionary, return False a, b: strings phonetic: map from words to pronunciation codes """ if a not in phonetic or b not in phonetic: return False return phonetic[a] == phonetic[b] def check_word(word, word_dict, phonetic): """Checks to see if the word has the following property: removing the first letter yields a word with the same pronunciation, and removing the second letter yields a word with the same pronunciation. word: string word_dict: dictionary with words as keys phonetic: map from words to pronunciation codes """ word1 = word[1:] if word1 not in word_dict: return False if not homophones(word, word1, phonetic): return False word2 = word[0] + word[2:] if word2 not in word_dict: return False if not homophones(word, word2, phonetic): return False return True if __name__ == '__main__': phonetic = read_dictionary() word_dict = make_word_dict() for word in word_dict: if check_word(word, word_dict, phonetic): print word, word[1:], word[0] + word[2:]