Hatena::Grouptwitter

smokeymonkey@ついったー部 RSSフィード

 | 

2008-01-26

開発オフ成果:フレンドタイムラインをMeCabで形態素解析してマルコフ連鎖かける

16:51 | 開発オフ成果:フレンドタイムラインをMeCabで形態素解析してマルコフ連鎖かける - smokeymonkey@ついったー部 を含むブックマーク はてなブックマーク - 開発オフ成果:フレンドタイムラインをMeCabで形態素解析してマルコフ連鎖かける - smokeymonkey@ついったー部

#!/usr/bin/perl

use strict;
use Net::Twitter;
use Jcode;
use Text::MeCab;

sub main {

  my $twit = Net::Twitter->new(username=>"smokeymonkey", password=>"PASSWORD") ;
  my $result = $twit->friends_timeline();

  my $i = 0;
  my $j = 0;
  my @DATA = ();
  my @words = ();

  foreach my $hash (@$result) {
    if( $hash->{'text'} !~ /@/ ){
      $DATA[$i] = $hash->{'text'};
      $i++;
    }
  }

  for ($j=0; $j<$i; $j++){
    my $mec = Text::MeCab->new;
    Jcode::convert(\$DATA[$j], 'euc');
    for (my $nod = $mec->parse($DATA[$j]); $nod; $nod=$nod->next ) {
      my $word = $nod->surface if length $nod->surface;
      Jcode::convert(\$word,'utf8');
      push @words, $word;
    }
  }

  my %markov;

  if (@words > 1) {
    for ($i = 1 ; $i < @words ; $i++) {
      if ($i < @words) {
        push(@{$markov{$words[$i-1]} }, $words[$i]);
      }
    }
  }

  my $pre1 = $words[0];

  my $rand = int (rand (@{$markov{$pre1} }));
  my $suf1 = $markov{$pre1}[$rand];

  my $text = $pre1.$suf1;

  for ($i=0 ; $i<50 ; $i++) {
    $pre1 = $suf1;

    $rand = int (rand (@{ $markov{$pre1} }));
    $suf1 = $markov{$pre1}[$rand];

    if ($suf1 eq "EOS\n") {
      last;
    }

    $text .= $suf1;
  }

  my $subtwit = Net::Twitter->new(username=>"smtest", password=>"PASSWORD") ;

  Jcode::convert(\$text, 'utf8');
  my $subresult = $subtwit->update($text);

}

eval {&main(@ARGV)};
print "ERROR\n" if $@;

exit;
 |