ラベル Mecab の投稿を表示しています。 すべての投稿を表示
ラベル Mecab の投稿を表示しています。 すべての投稿を表示

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の辞書に単語を登録する方法


2015年4月29日水曜日

Mecabの辞書に単語を登録する方法

Mroongaを使ってタグクラウドを作った。
(作ったのはこちら⇒http://www.direc.biz/home/tags)

よく見ると「足つぼマッサージ」という文字列の分解結果に「つぼ」がでてこない。

Mroongaのトークナイザーに使っているMecabに「足つぼマッサージ」を投げてみると、
「つぼ」は「つ」と「ぼ」になっていた。「つぼ」という単語が辞書にない模様。

[goy@myserver tmp]$ echo "足つぼマッサージ" | mecab
足      名詞,一般,*,*,*,*,足,アシ,アシ
つ      助動詞,*,*,*,下二・タ行,基本形,つ,ツ,ツ
ぼ      動詞,自立,*,*,五段・ラ行,体言接続特殊2,ぼる,ボ,ボ
マッサージ      名詞,一般,*,*,*,*,マッサージ,マッサージ,マッサージ

Mecabの辞書にはシステム辞書とユーザー辞書がありどちらにも追加登録できるが、システム辞書は
しくったらめんどそうだったので今回はユーザー辞書に登録する。


ユーザー辞書への登録


/tmp/foo.csv をつくり以下のように記載。4項目は検索スコアだが、いったん適当にいれる。
つぼ,,,5279,名詞,一般,*,*,*,*,つぼ,ツボ

辞書に登録するコマンドを実行する。実行ユーザーのホームディレクトリに拡張子が.dicのユーザー辞書ができる。

[goy@myserver tmp]$ /usr/libexec/mecab/mecab-dict-index -d /usr/lib64/mecab/dic/ipadic -u goy.dic -f utf-8 -t utf-8 /tmp/foo.csv
emitting double-array: 100% |###########################################|



Mecabにユーザー辞書を読み込ませる


/usr/lib64/mecab/dic/ipadic/dicrc を開き 末尾にユーザー辞書の設定を追加


; ChaSen (include spaces)
node-format-chasen2 = %M\t%f[7]\t%f[6]\t%F-[0,1,2,3]\t%f[4]\t%f[5]\n
unk-format-chasen2 = %M\t%m\t%m\t%F-[0,1,2,3]\t\t\n
eos-format-chasen2 = EOS\n

userdic = /home/goy/goy.dic # ←ここを追加


再度Mecabで形態素解析をしてみると、、、

[goy@myserver ~]$ echo "足つぼマッサージ" | mecab
足      名詞,一般,*,*,*,*,足,アシ,アシ
つぼ    名詞,一般,*,*,*,*,つぼ,ツボ
マッサージ      名詞,一般,*,*,*,*,マッサージ,マッサージ,マッサージ

今度は「つぼ」に分解された!



関連記事:
Mroongaを使ったタグクラウドの作り方