2015年5月5日火曜日

Mecabのユーザー辞書登録で nonexistent tokenizer: <TokenMecab>: が出たときの対応

Mroongaを使った全文検索で「足つぼ」が「足」「つ」「ぼ」に分解されてしまうため、「つぼ」をMecabの辞書に登録した。
Mecabに文字列を投げて「足」「つぼ」に分解することはできた。続いてMroongaでやってみる。


ActiveRecordを通さず、MySQLから直接実行してみると下記のようなエラーが。
[tokenize] nonexistent tokenizer: <TokenMecab>:

Mecabを認識していないようなメッセージだ。辞書を追加はしたが認識しなくなるとはどういうことだ?と思いつつ、
Mecabに読み込ませたユーザー辞書の設定を消してみるとエラーはでなくなった。

ん~、やっぱこれが原因かと首をかしげているとひらめいた。


ユーザー辞書のおき場所が一般ユーザーのホームディレクトリだったがMySQLはrootで起動するため所有者の違うファイルが読めなったのだろう。
っということで、ユーザー辞書を /usr/lib64/mecab/dic/ipadic/goy.dic に移動し、所有者、権限はそれぞれroot:rootの0644にした。


MySQLを再起動し、再度形態素解析してみると・・・、

mysql> SELECT mroonga_command("tokenize TokenMecab '足つぼマッサージ'");
+---------------------------------------------------------------------------------------------------------+
| mroonga_command("tokenize TokenMecab '足つぼマッサージ'")                                               |
+---------------------------------------------------------------------------------------------------------+
| [{"value":"足","position":0},{"value":"つぼ","position":1},{"value":"マッサージ","position":2}]         |
+---------------------------------------------------------------------------------------------------------+

今度はいけた。ActiveRecordを通してももちOK。


関連記事:
Mecabの辞書に単語を登録する方法


0 件のコメント:

コメントを投稿