無駄な抵抗改め共起による文章生成4
一応、"「"があるのに"」"がないってのを判定するルーチンを作った。
説明用にアレンジするのもめんどいので判定ルーチンだけそのまま貼ってみる。
# 必要な単語の組み合わせがあるかどうか計算 def calcNotExist(selectWord,wordstat,counts): for i in range(len(selectWord)): word_i = selectWord[i] if word_i == 開始文字 or word_i == 終了文字: continue flag = 0 # 0 = false, 1 = OK -1 = NG for word_k in wordstat.getAllYKeys(): score = float(wordstat.get(word_i,word_k)) / float(counts[word_i]) / 2.0 if score >= 1: flag = -1 for j in range(len(selectWord)): if i == j: continue word_j = selectWord[j] if word_j == 開始文字 or word_j == 終了文字: continue if word_j == word_k: flag = 1 break if flag != 1: flag = -1 break if(flag == -1): # ダメな文法。必要なものがない。 print u"必要なものがたりません".encode(mecabencode,'ignore'), print word_i, print word_k return 0 return 1
実行結果
必要なものがたりません 「 」 必要なものがたりません 今日 天気 必要なものがたりません と 言っ 必要なものがたりません 「 」 必要なものがたりません 明後日 でしょ 必要なものがたりません 「 」 必要なものがたりません 言っ が 必要なものがたりません 「 」 必要なものがたりません 明後日 でしょ 必要なものがたりません は た 必要なものがたりません 昨日 でし 必要なものがたりません 昨日 天気 必要なものがたりません お腹 言っ 必要なものがたりません 「 」 必要なものがたりません と が 「お腹がすいたなぁ」と太郎は言ったのよ。
・・とまあ、こんな感じに出てきます。
ちなみに覚えさせたコーパスは以下の5つなのですが、最後に出てくる文章は前3つに偏ってます。
- 今日はいい天気です
- 昨日はいい天気でした
- 明後日もいい天気でしょう
- 「お腹がすいたなぁ」と太郎は言った
- 「そうですね」
基本的に単語数が多いほうが制約が厳しくなりがちで、制約の厳しい文ほど出にくくなります。
この辺を考慮しないと出てくる文章がマンネリ化しそうですね。。。自動修正にするとか、ダメなときは部分修正にするとか・・