MeCabでカスタム辞書作成

| コメント(0) | トラックバック(0)



MeCabの辞書作成をやってみた。



昨日のText::MeCabバグになんで気づいたかというと、デフォルトのdictionaryだとmecabが「トラックバック」を単語として認識してくれないのに気づいたのでそれをどうにかしたかった。それをするにはやっぱり--userdicを指定しないとなぁ、と思って



my $mecab = Text::MeCab->new({userdic => '/Users/daisuke/mecab/foo.dic'});
for (my $node = $mecab->parse($text);
$node;
$node = $node->next
) {
print $node->feature, "\n";
}

みたいにしてみたのですよ。そしたらあーた!Segfaultの嵐じゃないですか。なんだなんだ?と思ってmecab_strerror()とか引っ張りだして検証してみたら"first argument seems to be invalid"みたいなエラーが出てて、なんじゃこらと思ってたらどうも引数を設定している時だけに起こるエラーだという事が発覚。色々やってようやくargvの処理の仕方が間違ってる事に気づいた。


で、これができたので辞書作ろうと思ったらうまくいかなかったので以下はメモとして。まずはここを参照しながらカスタム辞書作成。



http://mecab.sourceforge.jp/dic.html



基本的に書いてある通りであるのだけど、どうもmecab-ipadicをインストールする際にmake installがファイルを一個入れ忘れてるっぽ。



daisuke@beefcake daisuke$ cd /usr/local/lib/mecab/dic/ipadic
daisuke@beefcake ipadic$ sudo /usr/local/libexec/mecab/mecab-dict-index -u foo.csv -f euc-jp -c euc-jp /Users/daisuke/foo.csv
No such file or directory ./matrix.def
daisuke@beefcake ipadic$

ほげー。ってことでこうなる場合は、mecab-ipadic-XXXX.tar.gzを展開、makeして、そこにできるファイルmatrix.defをipadicのディレクトリにコピって来るべし。



daisuke@beefcake ipadic$ sudo cp ~/pkgs/mecab-ipadic-2.7.0-20051110/matrix.def
daisuke@beefcake ipadic$

これでもう万全。



daisuke@beefcake ipadic$ sudo /usr/local/libexec/mecab/mecab-dict-index -u foo.csv -f euc-jp -c euc-jp /Users/daisuke/foo.csv
reading /Users/daisuke/foo.csv ... 1
emitting double-array: 100% |###########################################|

done!
daisuke@beefcake ipadic$


こうしておいて、あとはText::MeCabを呼ぶ時にuserdicオプションを使うか、自分の.mecabrcとかに書くだけ。


Author

Daisuke Maki (a.k.a lestrrat): Perl hacker, Director of Japan Perl Association, YAPC::Asia Tokyo Organizer (2009-2012), Fluent in Japanese, English. Ex-Brazilian (sorta)

#perl #c #ruby #java #mysql #english #japanese #opensource #stf #cooking #scotch #cigar


このエントリーをはてなブックマ
ークに追加

翔泳社よりモダンPerl入門(2010)を出版させていただいております。できれば内容をアップデートしたいので是非皆様・・・現在の在庫処理にお力をお貸しください!><

月別アーカイブ