LoginSignup
0
0

More than 3 years have passed since last update.

Pythonでクロスワードの答えを見つける(文字を並び替えて名詞を見つける)

Last updated at Posted at 2021-06-20

プログラムでやりたい事

クロスワードで出てきた文字を並び変えて、
名詞を見つける

例:
 並び替え前の文字列:ティアースト
 求めたい答え(名詞):アーティスト

#janomeをインポート 形態素解析(辞書を参照するため)
from janome.tokenizer import Tokenizer
#itertoolsをインポート 重複なしのあらゆる並びを取得用
import itertools

#初期化 ループに入る前に行う
t = Tokenizer()

#並び替え前の文字列をTextに代入
text = "ティアースト"

#文字列結合用の変数を初期化
str1=""

#permutationsで重複なしの数字の並びを取得
a = list(itertools.permutations([0,1, 2, 3, 4, 5]))
#aには[(0, 1, 2, 3, 4, 5), (0, 1, 2, 3, 5, 4),…]の様な
#形でデータが入る 今回は6文字の並びを調べるので0~5を指定

for i in range(len(a)):
#len(a)=720 組み合わせは6!で720通り
    for token in t.tokenize(str1):
        #初回以外 str1には6文字の文字が入る状態で形態素解析
        part_of_speech = token.part_of_speech.split(',')[1]
        #2個目の要素を取り出す
        #ティアースト 名詞,固有名詞,組織,*,*,*,ティアースト,*,*
        #アーティスト 名詞,一般,*,*,*,*,アーティスト,アーティスト,アーティスト
        if part_of_speech == u'一般':
            #2個目の要素が一般の物だけ取り出す
            word = token.surface
            if (len(word) == 6):
                #「アート」等も拾ってしまうので、6文字拾えた物
                #のみ出力する
                print(word)
    str1 = ""
    #文字列結合用の変数を次のループに入る前に初期化
    for j in range(len(a[i])):
        #len(a[i])は6 ( (0, 1, 2, 3, 4, 5) )
        str1 = str1 + text[(a[i][j])]
        #文字列を足していき、6文字をくっつける
        #step1:空白 + 1文字目 = テ
        #step2:1文字目+2文字目 = ティ


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0