Subscribed unsubscribe Subscribe Subscribe

形態素解析を使って適当なnickを作ってWassrに送信するまで

Perl Wassr

MacにてText::MeCabを使う - すぎゃーんメモで下準備を終えた。
何がしたかったかというとこれ


まずはこんなスクリプトを書いてみた。

#!/opt/local/bin/perl
use strict;
use warnings;

use Text::MeCab;

my $mecab = Text::MeCab->new();
my $n = $mecab->parse($ARGV[0]);
my @nodes = ();     # 分かち書きしたものを一つの配列に入れる
my @noun = ();      # 名詞を検出した番号を格納する
my $index = 0;

while ($n = $n->next) {
    push(@nodes, $n->prev->surface);
    if ((split(/,/, $n->prev->feature))[0] eq '名詞') {
        push(@noun, $index);
    }
    $index++;
}

# 名詞からランダムに一つ選び出して置換する
my $replace = $noun[rand @noun];
$nodes[$replace] = 'kazuho';
print @nodes, "\n";


あとは適当な歌詞を拝借して引数に渡してやるだけ。

$ ./kazuho.pl "空と君とのあいだには今日も冷たい雨が降る"
空と君とのあいだには今日も冷たいkazuhoが降る
$ ./kazuho.pl "空と君とのあいだには今日も冷たい雨が降る"
kazuhoと君とのあいだには今日も冷たい雨が降る
$ ./kazuho.pl "空と君とのあいだには今日も冷たい雨が降る"
空と君とのあいだにはkazuhoも冷たい雨が降る

$ ./kazuho.pl "まわるまわるよ 時代はまわる 喜び悲しみくり返し"
まわるまわるよ時代はまわる喜びkazuhoくり返し
$ ./kazuho.pl "まわるまわるよ 時代はまわる 喜び悲しみくり返し"
まわるまわるよ時代はまわるkazuho悲しみくり返し
$ ./kazuho.pl "まわるまわるよ 時代はまわる 喜び悲しみくり返し"
まわるまわるよkazuhoはまわる喜び悲しみくり返し

$ ./kazuho.pl "悪女になるなら 月夜はおよしよ 素直になりすぎる"
kazuhoになるなら月夜はおよしよ素直になりすぎる
$ ./kazuho.pl "悪女になるなら 月夜はおよしよ 素直になりすぎる"
悪女になるならkazuhoはおよしよ素直になりすぎる
$ ./kazuho.pl "悪女になるなら 月夜はおよしよ 素直になりすぎる"
悪女になるなら月夜はおよしよkazuhoになりすぎる

うん、出来たっぽいw


あとはそれをWassrに送信できればよいので。

#!/opt/local/bin/perl
use strict;
use warnings;

use LWP::UserAgent;
use Text::MeCab;

my $mecab = Text::MeCab->new();
my $n = $mecab->parse($ARGV[0]);
my @nodes = ();     # 分かち書きしたものを一つの配列に入れる
my @noun = ();      # 名詞を検出した番号を格納する
my $index = 0;

while ($n = $n->next) {
    push(@nodes, $n->prev->surface);
    if ((split(/,/, $n->prev->feature))[0] eq '名詞') {
        push(@noun, $index);
    }
    $index++;
}

# 名詞からランダムに一つ選び出して置換する
my $replace = $noun[rand @noun];
$nodes[$replace] = 'kazuho';
print @nodes, "\n";


# Wassrのユーザー情報変更APIにPOSTする
my ($username, $password) = ('YOUR USER NAME', '**********');
my $url = 'http://api.wassr.jp/user/edit.json';
my $ua = LWP::UserAgent->new;
$ua->credentials(
    'api.wassr.jp:80',
    'API Authentication',
    $username,
    $password,
   );
$ua->post($url, { nick => join('', @nodes) });

これで完成!
自前で歌詞の辞書でも用意して、それを引数にとるようにしてcronで1時間ごとに実行したりしたら面白いかも!?