Location : Home > Languages > Perl > Package
Title : Algorithm::MarkovChain
Toolbox Logo

名称

 Algorithm::MarkovChain - オブジェクト指向マルコフチェーン生成


概要

use Algorithm::MarkovChain;

my $chain = Algorithm::MarkovChain::->new();

# @symbols から情報を取得
$chain->seed(symbols => \@symbols,
             longest => 6);

# sky について何かを教えようとする
my @newness = $chain->spew(length   => 20,
                           complete => [ qw( the sky is ) ]);

説明

 Algorithm::MarkovChain はオブジェクトコンテナの範囲でマルコフチェーンを実装したものである。
 ベースクラス Algorithm::MarkovChain::Base として実装されており、ハッシュ格納の実装(Algorithm::MarkovChain)並びに glib(Algorithm::MarkovChain::GHash)を利用しているのでかなりメモリ利用も効率的である。DBI 及び MLDBM 対応版も計画中である。
 選択的な表現方法も計画している。


メソッド

Algorithm::MarkovChain::->new() または $obj->new()

 Algorithm::MarkovChain クラスの新規インスタンスを生成する。
 オプションでパラメータ recover_symbols をとる。
 recover_symbols は文字列化した際に true 値とは違う文字であることを示す。このオプションにより spew メソッドにより返される記号が元の意味であることを保証できる。

$obj->seed()

 標本記号列からマルコフチェーンの種を採取する。
 2つの引数をとる。必須の引数は symbols であり、オプションで引数 longest をとる。
 symbols はそこから種を取得する記号列を指す。
 longest は構築すべきチェーンの上限を設定する。(デフォルトは4)

$obj->spew()

 記号列を生成するために、既に構築されたチェーンを使う。
 オプションで以下の引数をとる; complete, length, longest_subchain, force_length, stop_at_terminal, strict_start
 complete は出力生成の始点を設定する。
 注意:もしここで指定した文字列がチェーンの中に発見されない場合は、このリストの要素を削除する。これは無限ループに陥ることを防ぐためである。
 length は欲しい記号列の最小の長さを指定する。(デフォルトは30)
 stop_at_terminal は最初に終点に到着した時点で止めることを指定する。
 force_length は正確に length の長さの記号が返されることを保証する。(これは stop_at_terminal の動きをオーバーライドする。)
 strict_start は文字列をランダムに選ぶのではなく常に開始状態を認識して出力する。

$obj->increment_seen($sequence, $symbol)

 $sequence に続く seeness をインクリメントする。

$obj->recompute($sequence)

 ツリーの枝の確率を再計算する。「汚い」文字列から種を取得し終えるために呼び出される。

$obj->get_options($sequence)

 可能な次の記号または確率をハッシュとして返す。


To Do

  1. ドキュメント化:
    マルコフチェーンに関する説明を加え、例をもう少し肉付けしたい。
  2. バグフィクス/要望への対応:
    私にメールを richardc@unixbeard.net> 送ってほしい。それをハンマーで殴りつぶすかもしれないがね、、、

バグ

 ないとは思うが、私のマルコフチェーンに対する理解が自分で思っているほどでないことに起因するバグがあるかも知れない。
 それ、またはそれらは愚かなミスであろう。 :)


著者

 Richard Clamp, <richardc@unixbeard.net>


参考資料

 perl(1).

Toolbox Logo
Updated : 2006/11/21