このブログを検索

2012/12/21

MeCab

さくらのVPSにmecabをインストールする。

本体と辞書をインストールする。

辞書はデフォルトでeucなので、configureのオプションでutf8にする。

MeCab: Yet Another Part-of-Speech and Morphological Analyzer


wget http://mecab.googlecode.com/files/mecab-0.994.tar.gz
tar xvzf mecab-0.994.tar.gz
cd mecab-0.994
./configure
make
make check
make install

wget http://mecab.googlecode.com/files/mecab-ipadic-2.7.0-20070801.tar.gz
tar xvzf mecab-ipadic-2.7.0-20070801.tar.gz
cd mecab-ipadic-2.7.0-20070801
./configure --with-charset=utf-8
make
make install
mecab


起動してみる。


[hoge]# mecab
母は歯は丈夫だ
母 名詞,一般,*,*,*,*,母,ハハ,ハハ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
歯 名詞,一般,*,*,*,*,歯,ハ,ハ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
丈夫 名詞,形容動詞語幹,*,*,*,*,丈夫,ジョウブ,ジョーブ
だ 助動詞,*,*,*,特殊・ダ,基本形,だ,ダ,ダ
EOS
^C


さて、何をしたらおもしろいかな?

・・・と、スクリプトで使うにはそのスクリプトの「バインディング」というものが必要なので、それもインストールする。


wget http://mecab.googlecode.com/files/mecab-perl-0.994.tar.gz
tar zxvf mecab-perl-0.994.tar.gz


READMEに書いてあるが、以下を実行。


perl Makefile.PL
make
su
make install


これで、use MeCab を書けば、perlで使えるようになる。

前回使ったときは辞書がeucだったのでencode/decodeが必要だったが、今度はutf8にしたのでそのままいける。

・・・さて、何をしようか。




話は変わるが、perlで日付を取得したいときに、どうやるんだっけと調べると以下のような方法が見つかる。


@youbi = ('日', '月', '火', '水', '木', '金', '土');
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$year += 1900;
$mon += 1;
print "$year年$mon月$mday日($youbi[$wday]) $hour時$min分$sec秒\n";


日付の用途はいろいろで、これならフォーマットや足し引きなども万能かもしれないが、メンドクサイ。コピペするにしても、なんかめんどくさすぎる。

単に表示するだけなら、


print scalar(localtime())."\n";


または


my $tmp = localtime();
print $tmp."\n";


結果は以下のようになる。

centosで試した。プラットフォームによって変わるのかな?


Fri Dec 21 23:26:48 2012


今日は何曜日か?を知りたいときは、上にあげたようにすればいいが、わざわざ変数をいくつも並べるのは面倒だから、


@datedata = localtime();


として、曜日であれば配列の7番目 $datedata[6] を見ればよい。

日付処理に関するモジュールがいろいろあるようだが、何でもかんでもすぐモジュールを使うのもアレだし。

perlの配列を添え字をつけて参照するときは、@array[1] ではなく、 $array[1] とするんだね。

@がつくと、配列全体を指すのか。一個一個の配列をさすときは変数扱いで $となるのか。

私はperlの配列を添え字を使って特定の変数を取り出すことはあまりしない。

たいていは丸ごとあるいはpushでどかどか突っ込んで、foreachで吐き出しながら正規表現で引っ掛けて何かする、という風に使う。