.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 .\" .\" Standard preamble: .\" ======================================================================== .de Sh \" Subsection heading .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. | will give a .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to .\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' .\" expand to `' in nroff, nothing in troff, for use with C<>. .tr \(*W-|\(bv\*(Tr .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' 'br\} .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . nr % 0 . rr F .\} .\" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .hy 0 .if n .na .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "Algorithm::MarkovChain 3" .TH Algorithm::MarkovChain 3 "2008-01-07" "perl v5.8.8" "User Contributed Perl Documentation" .SH "NAME" Algorithm::MarkovChain \- Object oriented Markov chain generator .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 1 \& use Algorithm::MarkovChain; .Ve .PP .Vb 1 \& my $chain = Algorithm::MarkovChain::->new(); .Ve .PP .Vb 3 \& # learn about things from @symbols \& $chain->seed(symbols => \e@symbols, \& longest => 6); .Ve .PP .Vb 3 \& # attempt to tell me something about the sky \& my @newness = $chain->spew(length => 20, \& complete => [ qw( the sky is ) ]); .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" Algorithm::MarkovChain is an implementation of the Markov Chain algorithm within an object container. .PP It is implemented as a base class, \f(CW\*(C`Algorithm::MarkovChain::Base\*(C'\fR, with storage implementations of a hash (\f(CW\*(C`Algorithm::MarkovChain\*(C'\fR), and an fairly memory efficent implementation using \f(CW\*(C`glib\*(C'\fR (\f(CW\*(C`Algorithm::MarkovChain::GHash\*(C'\fR). \s-1DBI\s0 and MLDBM-friendly versions are planned. .PP Deriving alternate representations is intended to be straightforward. .SH "METHODS" .IX Header "METHODS" .ie n .IP "Algorithm::MarkovChain::\->\fInew()\fR or $obj\fR\->\fInew()" 4 .el .IP "Algorithm::MarkovChain::\->\fInew()\fR or \f(CW$obj\fR\->\fInew()\fR" 4 .IX Item "Algorithm::MarkovChain::->new() or $obj->new()" Creates a new instance of the Algorithm::MarkovChain class. .Sp Takes one optional parameter: \f(CW\*(C`recover_symbols\*(C'\fR .Sp \&\f(CW\*(C`recover_symbols\*(C'\fR 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 \&\fIspew\fR method. .IP "$obj\->\fIseed()\fR" 4 .IX Item "$obj->seed()" Seeds the markov chains from an example symbol stream. .Sp Takes two parameters, one required \f(CW\*(C`symbols\*(C'\fR, one optional \f(CW\*(C`longest\*(C'\fR .Sp \&\f(CW\*(C`symbols\*(C'\fR presents the symbols to seed from .Sp \&\f(CW\*(C`longest\*(C'\fR sets an upper limit on the longest chain to construct. (defaults to 4) .IP "$obj\->\fIspew()\fR" 4 .IX Item "$obj->spew()" Uses the constructed chains to produce symbol streams .Sp Takes four optional parameters \f(CW\*(C`complete\*(C'\fR, \f(CW\*(C`length\*(C'\fR, \&\f(CW\*(C`longest_subchain\*(C'\fR, \f(CW\*(C`force_length\*(C'\fR, \f(CW\*(C`stop_at_terminal\*(C'\fR and \&\f(CW\*(C`strict_start\*(C'\fR .Sp \&\f(CW\*(C`complete\*(C'\fR 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. .Sp \&\f(CW\*(C`length\*(C'\fR specifies the minimum number of symbols desired (default is 30) .Sp \&\f(CW\*(C`stop_at_terminal\*(C'\fR directs the spew to stop chaining at the first terminal point reached .Sp \&\f(CW\*(C`force_length\*(C'\fR ensures you get exactly \f(CW\*(C`length\*(C'\fR symbols returned (note this overrides the behaviour of \f(CW\*(C`stop_at_terminal\*(C'\fR) .Sp \&\f(CW\*(C`strict_start\*(C'\fR makes the spew operation always take a known start state rather than selecting a sequence at random .ie n .IP "$obj\->increment_seen($sequence, $symbol)" 4 .el .IP "$obj\->increment_seen($sequence, \f(CW$symbol\fR)" 4 .IX Item "$obj->increment_seen($sequence, $symbol)" Increments the seeness of a symbol following a sequence. .IP "$obj\->recompute($sequence)" 4 .IX Item "$obj->recompute($sequence)" Recompute the probabilities for a branch of the tree. Called towards the end of the seed operation for 'dirty' sequences. .Sh "$obj\->get_options($sequence)" .IX Subsection "$obj->get_options($sequence)" Returns possible next symbols and probablities as a hash. .SH "TODO" .IX Header "TODO" .IP "Documentation" 4 .IX Item "Documentation" I need to explain Markov Chains, and flesh out the examples some more. .IP "Fix bugs/respond to feature requests" 4 .IX Item "Fix bugs/respond to feature requests" Just email me and I'll hit it with hammers... .SH "BUGS" .IX Header "BUGS" Hopefully not, though if they probably arise from my not understanding Markov chaining as well as I thought I did when coding commenced. .PP That or they're jst stupid mistakes :) .SH "AUTHOR" .IX Header "AUTHOR" Richard Clamp .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fIperl\fR\|(1).