ishiducaの日記 このページをアンテナに追加 RSSフィード

2010-08-25

[][][]Yahoo!のテキスト解析Web APIで日本語生成(マルコフ連鎖) 20:14 Yahoo!のテキスト解析Web APIで日本語生成(マルコフ連鎖) - ishiducaの日記 を含むブックマーク はてなブックマーク - Yahoo!のテキスト解析Web APIで日本語生成(マルコフ連鎖) - ishiducaの日記 Yahoo!のテキスト解析Web APIで日本語生成(マルコフ連鎖) - ishiducaの日記 のブックマークコメント

日本語の形態素解析って言ったらText::ChasenとかText::MeCabあたりを使うみたいだけど、Yahoo!デベロッパーネットワーク - テキスト解析 - 日本語形態素解析も使えるよって、教えてもらったので早速マルコフ連鎖で日本語生成にチャレンジしてみた。

#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use Encode;
use URI::Escape;
use XML::Simple;
use LWP::UserAgent;

die "not found sentense\n" if ! @ARGV;

my $sentense = decode_utf8(join " ", @ARGV);

# アプリケーションIDは事前にYahooに申請して取得しておく
my $appid = 'Your Application ID';
my $url = "http://jlp.yahooapis.jp/MAService/V1/parse"
    . "?appid=${appid}&reults=ma,uniq&uniq_filter=9|10&sentence="
    . uri_escape_utf8($sentense);

my $ua = LWP::UserAgent->new;
my $response = $ua->get( $url );
die $response->status_line unless $response->is_success;

my $ResultSet = XMLin($response->{_content});
my @data = ();
my $eos = "EOS\n";

for my $word (@{$ResultSet->{ma_result}->{word_list}->{word}}) {
    push @data, encode_utf8( $word->{surface} );
}
push @data, $eos;

my %markov;
for (my $i = 2; $i < @data; $i++) {
    push @{$markov{$data[$i-2]}{$data[$i-1]}}, $data[$i];
}

#use Data::Dumper;
#print Dumper %markov;

my $pre1 = $data[0];
my @keys = keys %{ $markov{$pre1} };
my $pre2 = $keys[int rand $#keys];
my $rand = int rand @{$markov{$pre1}{$pre2}};
my $suf1 = $markov{$pre1}{$pre2}[$rand];
my $strings =  "$pre1 $pre2 $suf1";

for (my $i = 0; $i < 1000; $i++) {
    $pre1 = $pre2;
    $pre2 = $suf1;
    $rand = int rand @{$markov{$pre1}{$pre2}};
    $suf1 = $markov{$pre1}{$pre2}[$rand];

    last if $suf1 eq $eos;

    $strings .= " $suf1";
}

print "\n$strings\n";

exit 0;

うまく動かない場合は、マルコフ連鎖の文章生成の実装がまずいってことで<(_ _)>

RyanRyan2012/11/02 02:24This is crystal clear. Thanks for tnakig the time!

wftgzdwftgzd2012/11/02 11:01NKVxFY <a href="http://mhszxbjpckfm.com/">mhszxbjpckfm</a>

wgxwyzoowwgxwyzoow2012/11/02 15:27D3fI1O , [url=http://sfhkjyounyvf.com/]sfhkjyounyvf[/url], [link=http://xegnzliqbcmr.com/]xegnzliqbcmr[/link], http://qaoirsnopzpb.com/

wntejjwwntejjw2012/11/05 00:10VbBfTP <a href="http://beqwirkusfjn.com/">beqwirkusfjn</a>

xonznoxonzno2012/11/05 13:1841KBCL , [url=http://cblhyygafmjs.com/]cblhyygafmjs[/url], [link=http://mizaqspjvxxt.com/]mizaqspjvxxt[/link], http://wzejzqspeqno.com/

トラックバック - http://perl.g.hatena.ne.jp/ishiduca/20100825