全裸で形態素解析をするスクリプト - すぎゃーんメモ
を書いたところ、id:mattnさんからリクエストをいただいたので、
http://wassr.jp/user/mattn/statuses/8zaxVULk05
作ってみた。
irssiのプラグインを作る - すぎゃーんメモところから調べ始め。
どうやら自分が発言するときは"send text"というsignalが送られるらしいので、そこだけhookして、あとは全裸形態素解析にかけるだけ。
Redirecting…
use strict; use warnings; use Irssi 'signal_add'; use vars qw($VERSION %IRSSI); use Text::MeCab; use Readonly; Readonly::Scalar my $zenra => '全裸で'; $VERSION = '1.00'; %IRSSI = ( authors => 'sugyan', contact => 'sugi1982@gmail.com', name => '全裸', description => '日本語の発言を全裸にするよ', license => 'てきとー', ); # 自分の発言をフックして書き換える sub send_text { my ($line, $server, $witem) = @_; my $text = ''; for my $sentence (split/(\s+)/, $line) { $text .= $sentence =~ /\s+/ ? $sentence : zenrize($sentence); } Irssi::signal_continue($text, $server, $witem); }; signal_add('send text', \&send_text); # 日本語の文章を全裸にする sub zenrize { my $text = shift; my $mecab = Text::MeCab->new(); my $n = $mecab->parse($text); my $output = ''; # 末尾まで進める $n = $n->next while ($n->next); my $flg = 0; # 末尾からさかのぼる while (($n = $n->prev)->prev) { # フラグがたっていれば「全裸で」を挿入 # ただし、名詞/副詞/動詞のときはまだ挿入しない if ($flg) { my $insert = 1; if ($n->feature =~ / \A (名詞|副詞|動詞) /xms) { $insert = 0; } # また、連用形の動詞→助(動)詞の場合も挿入しない elsif ($n->feature =~ / \A 助(動)?詞 /xms && (split(/,/, $n->prev->feature))[5] =~ / 連用 /xms) { $insert = 0; } if ($insert) { $output = $zenra . $output; $flg = 0; } } # 出力の連結 $output = $n->surface . $output; # 動詞を検出してフラグをたてる if ($n->feature =~ / \A 動詞 /xms) { $flg = 1; } } # 先頭のチェック if ($flg) { $output = $zenra . $output; } return $output; }
せっかくなのでCodeReposにも上げておきましたw
http://coderepos.org/share/browser/lang/perl/irssi/scripts/zenra.pl
基本的に自分の発言は全部「全裸で」がつくようになるので、IRCでマジメな議論をする場合やtig, wigなどを使ってIRCからTwitter, Wassrを更新する場合は気をつけて使ってください ><