Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

「[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}]]