コード例 #1
0
ファイル: init_dict.py プロジェクト: kspi/anagrams
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.')
コード例 #2
0
ファイル: anagrams.py プロジェクト: kspi/anagrams
 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