Algorithm::MarkovChain - Object oriented Markov chain
generator
use Algorithm::MarkovChain;
my $chain = Algorithm::MarkovChain::->new();
# learn about things from @symbols
$chain->seed(symbols => \@symbols,
longest => 6);
# attempt to tell me something about the sky
my @newness = $chain->spew(length => 20,
complete => [ qw( the sky is ) ]);
Algorithm::MarkovChain is an implementation of the Markov Chain
algorithm within an object container.
It is implemented as a base class,
"Algorithm::MarkovChain::Base", with
storage implementations of a hash
("Algorithm::MarkovChain"), and an fairly
memory efficent implementation using
"glib"
("Algorithm::MarkovChain::GHash"). DBI and
MLDBM-friendly versions are planned.
Deriving alternate representations is intended to be
straightforward.
- Algorithm::MarkovChain::->new()
or $obj->new()
- Creates a new instance of the Algorithm::MarkovChain class.
Takes one optional parameter:
"recover_symbols"
"recover_symbols" has
meaning if your symbols differ from their true values when stringifyed.
With this option enabled steps are taken to ensure that the original
values for symbols are returned by the spew method.
- $obj->seed()
- Seeds the markov chains from an example symbol stream.
Takes two parameters, one required
"symbols", one optional
"longest"
"symbols" presents the
symbols to seed from
"longest" sets an upper
limit on the longest chain to construct. (defaults to 4)
- $obj->spew()
- Uses the constructed chains to produce symbol streams
Takes four optional parameters
"complete",
"length",
"longest_subchain",
"force_length",
"stop_at_terminal" and
"strict_start"
"complete" provides a
starting point for the generation of output. Note: the algorithm will
discard elements of this list if it does not find a starting chain that
matches it, this is infinite-loop avoidance.
"length" specifies the
minimum number of symbols desired (default is 30)
"stop_at_terminal" directs
the spew to stop chaining at the first terminal point reached
"force_length" ensures you
get exactly "length" symbols returned
(note this overrides the behaviour of
"stop_at_terminal")
"strict_start" makes the
spew operation always take a known start state rather than selecting a
sequence at random
- $obj->increment_seen($sequence, $symbol)
- Increments the seeness of a symbol following a sequence.
- $obj->recompute($sequence)
- Recompute the probabilities for a branch of the tree. Called towards the
end of the seed operation for 'dirty' sequences.
Returns possible next symbols and probablities as a hash.
Hopefully not, though if they probably arise from my not
understanding Markov chaining as well as I thought I did when coding
commenced.
That or they're jst stupid mistakes :)
Richard Clamp <richardc@unixbeard.net>
Hey! The above document had some coding errors, which are
explained below:
- Around line 180:
- You forgot a '=back' before '=head2'
- Around line
184:
- =back without =over