ちょっとましになった,アナグラムを解析するpythonスクリプト

前回のエントリーのスクリプトがgmkzでかつ人様に迷惑をかけていたので,せめて人様に迷惑をかけない仕様に変更しました.

概要

  • 突然アナグラムの文字列を送られて解読に困った時に役立つスクリプト

使い方

下記のソースコードをコピペしてanagram.pyみたいな名前で保存して,下記を実行

python anagram.py epapl 
epapl  may be estimated  -> appel apple

注意点

  • このスクリプトを実行するためには以下のモジュールのインストールが必要な可能性があります.
    sudo easy_install -Z pyobjc
    sudo easy_install -Z pyobjc-framework-DictionaryServices
    
  • 4文字の場合でも 4!= 24回辞書へのアクセスしてるので,長い文字列を入力すると死にたくなりますorz

前回からの変更点

  • 内部辞書を参照しているのでオフライン環境でも動く

ソースコード

#!/usr/local/bin/python
#coding: UTF-8

from elementtree.ElementTree import * from DictionaryServices import * #import urllib import itertools import sys

def has_on_dic(word): result = DCSCopyTextDefinition(None, word, (0, len(word))) if result != None: return True else: return False

def get_word_by_numbers(word,numbers): converted_word = "" for i in numbers: converted_word += word[i] return converted_word

def main(): search_word = sys.argv[1].decode('utf-8') proposed_word = []

<span class="synStatement">for</span> c <span class="synStatement">in</span> itertools.permutations(<span class="synIdentifier">range</span>(<span class="synIdentifier">len</span>(search_word))):
    anagramed_word = get_word_by_numbers(search_word,c)
    <span class="synStatement">if</span> has_on_dic(anagramed_word ) <span class="synStatement">and</span>  <span class="synStatement">not</span> anagramed_word <span class="synStatement">in</span> proposed_word:
        proposed_word.append(anagramed_word)

<span class="synIdentifier">print</span> search_word+<span class="synConstant">&quot;  may be estimated  -&gt;&quot;</span>,
<span class="synStatement">for</span> word <span class="synStatement">in</span> proposed_word:
    <span class="synIdentifier">print</span> word,

if name == 'main': main()

参考にさせていただいたサイト