読者です 読者をやめる 読者になる 読者になる

[[ともっくす alloc] init]

ともっくすの雑多な日記と技術的なメモ

Pythonリハビリのために文章自動生成プログラムを作ってみた

最近、PHPばかり触っていて、Pythonのことを忘れかけていたので、Pythonで何か作ることにした。

特に深い理由も無いが、ジェネレータ的な何かが作りたいと思って、文章の自動生成プログラムを作ることにした。

文章自動生成プログラムとは

元データを与えて、マルコフ連鎖を使うことで、元データとは異なるが、だいたい意味の通じる文章を生成するプログラム。

マルコフ連鎖とは、確率過程の一種であるマルコフ過程のうち、とりうる状態が離散的(有限または可算)なもの(離散状態マルコフ過程)をいう。また特に、時間が離散的なもの(時刻は添え字で表される)を指すことが多い(他に連続時間マルコフ過程というものもあり、これは時刻が連続である)。マルコフ連鎖は、未来の挙動が現在の値だけで決定され、過去の挙動と無関係である(マルコフ性)。各時刻において起こる状態変化(遷移または推移)に関して、マルコフ連鎖は遷移確率が過去の状態によらず、現在の状態のみによる系列である。特に重要な確率過程として、様々な分野に応用される。

マルコフ連鎖 - Wikipedia

つまり、現在が決まれば未来が決まり、過去は関係無いということ。

どのように利用するかと言うと、「マルコフ連鎖による文章の自動生成 - delirious thoughts」がわかりやすいかもしれない。

とりあえず、Pythonリハビリのために、マルコフ連鎖を使って、ごにょごにょして、文章自動生成プログラムを作りましたという話。

実際のプログラムはこちら > o-tomox/TextGenerator · GitHub

使い方

まずは、マルコフ連鎖のための事前準備を行う。

from PrepareChain import PrepareChain
text = u"適当な長い文章。長い文章。"
chain = PrepareChain(text)
triplet_freqs = chain.make_triplet_freqs()
chain.save(triplet_freqs, True)

これで、事前準備完了。

事前準備さえできていれば、あとは文章が作り放題となる。

下記のように実行するだけ。

from GenerateText import GenerateText
generator = GenerateText()
print generator.generate()

実行してみる

元データとしては、檸檬が爆発することで有名な、梶井基次郎『檸檬』を使用させていただいた。梶井基次郎 檸檬

その結果の一例としては、以下の通り。

しかし私は変に緊張してもよそよそしい表通りよりも熱かった。そして私は街の上の私自身を慰めるために手の握り合いなどをした。がその時の私自身を慰めるのだ。以前私を追いたてる。あのびいどろの味ほど幽かな涼しい味があるように思えた。

なんとなくできている。

元データが少ないので、ほとんど原文に近いが、こんなもんでしょう。



簡単なリハビリ終了ー