あわせて読みたいブログパーツ
2008-12-20

あたし状態遷移図を作ってみる(for windows)

テーマ:ブログ
ケータイ小説「あたし彼女」、自動生成出来ることが判明(アルファルファモザイク)の記事が話題になってる。元ネタは、「あたし状態遷移図」、あるいは「あたし約5.2MB」
自分でも作ってみたい!と思った人は少なくないんじゃないだろうか?
その作り方のwindows版の説明をしたいと思う。いろんな方法があるので、興味があったら、他の方法もググってみてください。

とりあえず、以下の図ができた。
タダのブログ:xxx裏ページxxx

さらに、カレー遷移図なるものを作ってみた。あした、カレー、みたいなかんじじゃなくて、カレー → カレースパゲティ みたいな。こちら

「あたし状態遷移図」を描かれた方のコメントを見ると、以下ツールを使って書かれているようだ。
Graphviz dot.exe
ちなみに、Graphvizについてはこちらが参考になるかと

このGraphivizを使えばいいというのは何となく分かった。ただ、情報が圧倒的にLinuxが多い。ここでは、Windowsユーザ(Linuxユーザは情報が多いので割愛)のための手順を書いてみる。
1.ここからGraphvizをダウンロード(downloadページからagreeを押下。graphviz-2.20.3.msiをDL)
日本語化が面倒だったので、WinGraphviz ver 1.0.2.25s(Binary File|MSI版)を利用
2.DOWNLOADしたファイルを展開(インストールオプションはパス指定のみ)。サンプルコードを実行し、動作確認
3.次にdotファイルを作成(これが面倒w)

digraph G{
node[fontname="MS Gothic"];
1 [label="私"];
2 [label="彼女"];
A [label="みたいな"]
1 -> 2 -> A;
}

4.dotファイルを展開する。
WinGraphvizはモジュール(ACTIVE X)なので、プログラムから変換してあげなきゃいけない。2でサンプルコードを実行したが、dotファイルのコードも直接VBSに書き込んでいた為、見通しが悪い。なので、FSOを使って外部dotを読み込むように修正しましたプログラムを書くこちら(winGraphviz.vbs一応ZIP化してます)
本VBSをクリックして、以下PNGが出力されるのを確認しました。

タダのブログ:xxx裏ページxxx


分かると思いますが、修正のためには、テキストエディタで開いてください。デフォルトだと
C:\demo.dot
にあるdotファイルを
C:\test.PNG
として、PNG化します。
dotファイルのパスは、12行目を修正。

'Sample data of DOT
dot_file="c:\demo.dot"
Set objInFile = objFileSys.OpenTextFile(dot_file,1)

出力先は、35行目

Dim FilePath
FilePath = "c:\test.PNG"

を修正してください。

最後に、この図の考え方をちょっと補足したいと思います。

この根幹となる考え方は2つ。マルコフ連鎖と、オートマトン。
前者は文字の繋がりと頻度、関連性を考えるロジック。
後者は状態の変化・推移を図示するための方法論。

マルコフ連鎖については、こちらあたりが分かりやすいかと思う。ジェネレータ関連は結構好きだったので、このあたりはよく調べてたものだ(苦笑)。
オートマトンについてはこのあたりがわかりやすいかと。簡単に言うと、状態の変化と連続性。上記サイトの例を引用してみるのがシンプルで分かりやすいかもしれない(一部、字数や文の前後関係の問題で加筆修正を行った。原文に興味ある人は上記サイトをご覧ください)

履歴書などには健康状態について書く欄がある。 通常は良好などと書き込んだりする。 健康状態が良好でない場合とは即ち病気にかかっている場合だ。 それもひどくなると重病と言われ、 立って歩くのも辛くなる。 寝込んで額に氷嚢を当てる絵はマンガで良く見かける。
と言う訳で、 健康状態と言えばとりあえず次の3つの単語が出てくる。
・良好
・病気
・重病
ここで健康状態にはこの3つしかないものと仮定する。

更に次のような台本(制約)を考える。
・健康状態が良好でも不摂生がたたれば病気になる。
・病気の時に無理せず休めば良好な状態に復帰する。
・しかしそこで無理をすれば重病になってしまう。
・重病でも薬を飲めば病気という程度まで回復する。
・回復した所でしっかり休めばまた良好な状態に戻れる。
・健康状態良好からいきなり重病になる事は無い。
・重病になった場合、ある日突然良好な状態になる事も無い。
┏━━┓→┏━━┓→┏━━┓
┃良好┃ ┃病気┃ ┃重病┃
┗━━┛←┗━━┛←┗━━┛

ここで良好・病気・重病といった単語は健康という観点から体内の様子を分類し表現している。 このような時、 これらの単語によって象徴される内部の様子を 「状態」 と言う。 ある状態から別の状態へ移り変わる事は状態の 「遷移」 と呼ばれる。 ここで重要なのは次の2点である。


後者のオートマトンについてはGraphvizを使えば、楽に実現できる、というのは先に実験結果を提示したとおり。『あたし彼女』じゃなくても、仕事のフローや、いろんな面で使うことができるはずです(というか、『あたし彼女』で使っていることが特異なんだけど→だからこそ面白い!て思うんだけど^^)


ちなみに、形態解析によるある程度のランダム生成はこちらで実装されています(すんません、センテンスごとに区切ったものをランダムで並び替えてるようです)。こちらのサイトも合わせてみてみるといいかもー。
18才以上の方はこちら(官能小説自動生成ソフト七度文庫)も、いいかもしれませんねwww


CGIで、PNG生成までやっちゃうとかなりサーバ負荷が面倒なんで、入力された文章を元に形態要素解析し、dotファイルを自動生成するのは面白いかもしれないなぁ…
AD
いいね!した人  |  コメント(0)  |  リブログ(0)

kazu氏(ex.なかのひと)さんの読者になろう

ブログの更新情報が受け取れて、アクセスが簡単になります

コメント

[コメントをする]

コメント投稿

AD

Ameba人気のブログ

Amebaトピックス

      ランキング

      • 総合
      • 新登場
      • 急上昇
      • トレンド

      ブログをはじめる

      たくさんの芸能人・有名人が
      書いているAmebaブログを
      無料で簡単にはじめることができます。

      公式トップブロガーへ応募

      多くの方にご紹介したいブログを
      執筆する方を「公式トップブロガー」
      として認定しております。

      芸能人・有名人ブログを開設

      Amebaブログでは、芸能人・有名人ブログを
      ご希望される著名人の方/事務所様を
      随時募集しております。