Subscribed unsubscribe Subscribe Subscribe

全裸で形態素解析をするスクリプト

Perl Wassr

ゲレンデがとけるほどくだらないスクリプト - すぎゃーんメモに引き続き、くだらないスクリプトを。
今度は動詞の前に「全裸で」を挿入する。

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

use JSON 'decode_json';
use LWP::Simple 'get';
use Text::MeCab;
use Readonly;

Readonly::Scalar my $zenra => '全裸で';

# 引数に文章があればそれを対象に
my $text = shift;
if (defined $text) {
    print zenrize($text), "\n";
}
# 引数指定が無い場合はWassrのPublic Timelineを使用する
else {
    my $json = get 'http://api.wassr.jp/statuses/public_timeline.json';
    for my $status (@{decode_json $json}) {
        my $result = zenrize($status->{text});
        print "$result\n";
    }
}

# 日本語の文章を全裸にする
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;
}

ゲレンデがとけるほどくだらないスクリプトとほぼ同じだけど、ちょっと挿入条件を改良してみた。
「試してみる」とか動詞が2つ出てくる場合も自然な日本語になるように。


実行例:

$ ./zenra.pl 本音を言うと、チョコレートをとかす程度でいいから恋したい
本音を全裸で言うと、チョコレートを全裸でとかす程度でいいから全裸で恋したい
$ ./zenra.pl
暑い!と全裸で思ってエアコンディショナーする前に、「氷水を全裸で飲む」、「温度低めのシャワーを全裸で浴びる」、この二つを全裸ですると電気代節約に全裸でなります マジで・・・
トカゲの気分を全裸で抱きしめて♪
三つの約束。光に全裸で当てては全裸でいけない全裸で(熟睡できないから)。水に全裸で濡らさない(風邪を全裸で引くから)。食べ物を全裸で与えては全裸でいけない全裸で(太るから)。
全裸でスカイプヴァージョンUPした
気晴らしにSL24のスケジュールチェックなんか全裸でしてみる。親方のブログとSL24公式ページの番組表とやらが全く同じ構成に全裸で見える。もうわけが全裸でわからないのでぐんにゃり。本気でどうでも良く全裸でなってきた
アイドルマスター メイド伊織のエプロンを全裸で光らせてみた。http://ext.nicovideo.jp/watch/sm7782534
ローション、ローション・・・
アイドルマスター真目が全裸で合う瞬間(とき)スバルザイホツノミスマルhttp://ext.nicovideo.jp/watch/sm7782011
全裸で*ちーちゃん*目が全裸で逢う瞬間(千早ソロ)http://ext.nicovideo.jp/watch/sm7781966
アイドルマスターL4Uキラメキラリラフタイムスクール真ソロhttp://ext.nicovideo.jp/watch/sm7781833
告知@ちんぽちゃん(chinpoko)が世界にキーボードを全裸で打つと全裸で違う文字が全裸で出る原因(打てないからぐぐれない)を全裸で要求しています。http://wassr.jp/user/chinpoko/statuses/QM6Oq98rVy
美希とともにトップをテキトーに全裸でめざすプレイ動画 デビュー前第3週http://ext.nicovideo.jp/watch/sm7781593
それを全裸で踏まえた上で現代日本において、全裸で毒されていない田舎の女子中学性がだな、火が全裸でついてだな、教師を全裸で誘う図をモチーフに全裸ですべきなのだよ。
106キーボード以外の設定に全裸でなってるとか?-Krile-
http://nequal.jp/blog/2009/07/30/31/-Openpearブログを全裸ではじめました
全裸でhttp://d.hatena.ne.jp/sotarok/20090729/1248883342-[Openpear][nequal]Openpearブログはじめます
相変わらずの5とそれ以外の温度差がワロスhttp://www.nicovideo.jp/watch/sm2707709
ローマ字入力のつもりでカナ入力に全裸でなっているとか?
金銀リメイクのHPより●ゲーム中、おかあさんに全裸で話しかけることで、貯金を全裸でするかどうか全裸で選べるように全裸でなるよ。全裸で貯金しておくと、何かいいことが全裸であるかも!?⇒画像3枚目●おかあさん『ソウルの おかねで 全裸でかっちゃった! ゴメンね!』
ね全裸でむけたんと眠杉さんの仲間ま全裸でふね

まぁ完璧にはならないか。日本語ってむずかしい。


夜中にWassrのPublic Timelineでデバッグしてたら全裸で寝る宣言をしてるヒトが多くて面白かったw