markov chain and mecab · GitHub
#!/usr/bin/env perl use strict; use warnings; use Text::MeCab; use Algorithm::MarkovChain; use Perl6::Say; use Data::Dumper; open my $in, '<', shift or die $!; my $text = do { local $/; <$in>; }; close $in; my $mecab = Text::MeCab->new({}); my @symbols; for (my $node = $mecab->parse($text); $node; $node = $node->next) { #say $node->surface; push @symbols, $node->surface; } my $chain = Algorithm::MarkovChain->new; $chain->seed( symbols => \@symbols, longest => 4, ); my @newness = $chain->spew( length => 140, strict_start => 1, #complete => [ qw( the sky is ) ], ); for my $chunk (@newness) { print $chunk; }
- Algorithm::MarkovChain の spew メソッドの strict_start オプションは、 @symbols で与えたものの一番先頭の要素から必ず文章がはじまるようにするためのもの。例えば、太宰治 走れメロスを与えると必ず「走れ」が先頭にくるようになる。これを外すと、「てにをは」が最初にきたりして不自然な文章になることが多い。
- その他のオプションとかの意味はよくわかってない。