― Web Technology and Life ―

mecabのシステム辞書がテストの度に書き換わってしまいgitでmodify表示される対処

2011-04-29
mecabの辞書を自分でコンパイルして自分なりの辞書を作りたいという欲求は、mecabを使っていると出てくると思います。ただ、mecab辞書の再コンパイルをテストに組み込んでおくと、辞書のバイナリファイルが毎回書き換わってしまい、git statusするmodifyで表示されるという微妙な状況に陥ります。そんなときにした対処方法をメモ。

テストコード

ホントはもっとアプリの実装ロジック的なことをテストしていてごちゃごちゃしているんだけど、とりあえず、mecabのコンパイルの箇所だけ抜き出すとこんな感じ。

use strict;
use warnings;
use Test::More;
use Your::Module;

my $mecab_dict = Text::MeCab::Dict->new(
    dict_source     => '/home/hirobanex/MyApp/assets/mecab/dic/sys.dic',
    output_encoding => 'utf-8',
);

$mecab_dict->rebuild;

ok 1;

done_testing;

reverse_mecab_dict();

sub reverse_mecab_dict {
    my @cmd = (
        'git'
        ,'checkout'
        ,'assets/mecab/dic/sys.dic'
        ,'assets/mecab/dic/unk.dic'
        ,'assets/mecab/mecab-ipadic-2.7.0-20070801/sys.dic'
        ,'assets/mecab/mecab-ipadic-2.7.0-20070801/unk.dic'
  );

    if (system(@cmd) != 0) {
        die "Failed to execute '@cmd': $!";
    }
}

解説

modifyになってしまうファイルを、ただsystemコマンドで、git checkoutしているだけです・・・。まぁ、一応、セキュリティに気を付けた、かつ、エラーハンドリングもされているsystemコマンドの使い方の備忘録も兼ねてということで。(実際この書き方も、Text::MeCab::Dictから学んだんだけど・・・)そもそも、運用方法的にいけていな感じなんだけど、まぁとりあえずはこれでgitの整合性をとっておくということで。。。

その他の補足

Text::MeCab::Dictについて

Text::MeCabについているPerlからMeCabのシステム辞書に新しい単語を追加したりできるいい感じのモジュール。あくまでシステム辞書へのインターフェースであってユーザー辞書のインターフェースはないので、ユーザー辞書をいじりたい場合は、自分で実装する必要あり。ユーザー辞書とかシステム辞書の解説はこちらのMeCabの公式ドキュメントを見てください。

辞書ファイルのパスについてとコンパイル手順

yumとかaptでmecab入れると、/var/lib/mecab/dic/ipadic-utf8/とかに辞書も一緒に入ると思うんだけど、これは、root管理下のシステム環境に入ってしまうので、sudoとかしなきゃいじれないとか、一度いじっちゃうと消すのが大変だし、ということもあって自分でコンパイルしています。以下参照。

$ wget http://sourceforge.net/projects/mecab/files/mecab-ipadic/2.7.0-20070801/
$ tar xvzf mecab-ipadic-2.7.0-20070801
$ ./configure --with-charset=utf8 --with-dicdir=../dic #./dicは新しく作る辞書dirで相対パス表記で汎用的に
$ /usr/lib/mecab/mecab-dict-index -f euc-jp -t utf-8 #/usr/lib/mecab/mecab-dict-indexはサーバ環境依存
$ make install

なお、こちらにあるように、コンパイル前に品詞IDの定義をしておくと、その後品詞別とかでプログラムから扱う(機会処理を行う)のが楽になるということでWeb+DB RESS Vol.56でid:naoyaさんがオススメしていました。

Perl update_at : 2011-09-07T18:49:03
hirobanex.netの更新情報の取得
 RSSリーダーで購読する   
blog comments powered by Disqus