Subscribed unsubscribe Subscribe Subscribe

irssiで全裸で発言するためのプラグイン

Perl

全裸で形態素解析をするスクリプト - すぎゃーんメモ
を書いたところ、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を更新する場合は気をつけて使ってください ><