Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

「[tokenize] unknown tokenizer: <TokenMecab>」と出たら素直にgroongaのビルドからやり直しませう

groonga導入済の環境で、mroongaをmecab付きで導入しようとしたところ、ダメっぽい感じでした。

$ groonga
> register normalizers/mysql
[[-3,1399468383.43181,0.00655889511108398,"cannot find plugin file: </usr/local/Cellar/groonga/4.0.1/lib/groonga/plugins/normalizers/mysql.so>",[["grn_plugin_register","plugin.c",507]]],false]
> tokenize TokenMecab "あす"
[[-22,1399468387.56808,0.000420808792114258,"[tokenize] unknown tokenizer: <TokenMecab>",[["create_lexicon_for_tokenize","proc.c",3168]]],[]]

調べてみた所、groonga自体がmecab用にビルドされてないとダメな模様。
確認方法として

$ groonga --version |grep mecab
$

となんの反応もなければ導入できていません。
...でもgroonga公式のインストールガイドにはmecabの記述がありません。

ソースからビルドするのも手なのですが、後々brew doctor先生に怒鳴られるのが目に見えています。
なんとかしてbrewでやる方法を探さなくては。
そんなわけでネットの海を徘徊し続けた結果、情報を発見。

$ brew edit groonga
...
  depends_on "mecab" => :optional
  depends_on "mecab-ipadic" if build.with? "mecab"
...

groongaにmecabオプションの記述がありますね。
というわけで、仕切り直しです。
まずはmecab

$ brew uninstall mecab
$ brew uninstall mecab-ipadic
$ brew install mecab
$ brew install mecab-ipadic

動作確認

$ echo '東京' | mecab
東京	名詞,固有名詞,地域,一般,*,*,東京,トウキョウ,トーキョー
EOS

次にgroonga系

$ brew uninstall groonga
$ brew uninstall mroonga
$ brew install groonga --with-mecab
$ brew install https://raw.github.com/mroonga/homebrew/master/mroonga.rb --use-homebrew-mysql --with-mecab

再度確認すると...

$ groonga --version | grep mecab
groonga 4.0.1 [darwin13.1.0,x86_64,utf8,match-escalation-threshold=0,nfkc,mecab,msgpack,zlib,lzo,kqueue]
configure options: < '--prefix=/usr/local/Cellar/groonga/4.0.1' '--with-zlib' '--disable-zeromq' '--with-mecab' 'CC=clang' 'CXX=clang++' 'PKG_CONFIG_PATH=/usr/local/opt/pcre/lib/pkgconfig' 'PKG_CONFIG_LIBDIR=/usr/lib/pkgconfig:/usr/local/Library/ENV/pkgconfig/10.9'>

やったぜ!

念のため動作確認です。

$ groonga
>  register normalizers/mysql
[[-3,1399473641.21891,0.000604867935180664,"cannot find plugin file: </usr/local/Cellar/groonga/4.0.1/lib/groonga/plugins/normalizers/mysql.so>",[["grn_plugin_register","plugin.c",507]]],false]
> tokenize TokenMecab "隣の"
[[0,1399473645.32267,0.00908207893371582],[{"value":"隣","position":0},{"value":"の","position":1}]]
> tokenize TokenMecab "隣の客はよく柿喰う客だ"
[[0,1399473660.19531,0.0227370262145996],[{"value":"隣","position":0},{"value":"の","position":1},{"value":"客","position":2},{"value":"は","position":3},{"value":"よく","position":4},{"value":"柿","position":5},{"value":"喰う","position":6},{"value":"客","position":7}]]