def init_dict(verbose=False): def log(s, newline=True): if verbose: if newline: print s else: print s, sys.stdout.flush() word_anas = dict() longest_word_len = 0 words = 0 anagram_classes = 0 log('Loading words ...', newline=False) for line in open(DICTIONARY_FILE, 'r'): line = line.strip() if line != '' and (line in SHORTWORDS or len(line) > 2) and not FORBIDDEN_SYMBOL.search(line): words += 1 letters = letterize(line) if letters in word_anas: word_anas[letters].append(line) else: word_anas[letters] = [line] anagram_classes += 1 if len(letters) > longest_word_len: longest_word_len = len(letters) log('done.') log('Words: {words}\nAnagram classes: {anagram_classes}\nLongest word length: {longest_word_len}'.format(**locals())) log('Pickling ...', newline=False) marshal.dump((word_anas, longest_word_len), open('dict.dat', 'wb')) log('done.')
def anas(left, right): for initial_word in word_anas.get(letterize(left), []): if right == '': yield [initial_word] else: for right_anagram in all_anagrams(right): yield [initial_word] + right_anagram