[groonga-dev,03975] Re: MeCabの辞書について

Back to archive index

info****@webmk***** info****@webmk*****
2016年 3月 10日 (木) 18:11:32 JST


須藤様

回答ありがとうございます。

MeCabについて理解できました。
早速ユーザー辞書に「Wi-Fi」を追加したところ、MeCabでは以下のように正しく
処理されました。

Wi-Fi   名詞,一般,*,*,*,*,WI-FI,Wi-Fi,ワイファイ

そこで、このページ(http://mroonga.org/ja/docs/news/4.x.html)のやり方

ALTER TABLE contents DISABLE KEYS;
ALTER TABLE contents ENABLE KEYS;

でインデックスの更新を行ったのですが、依然正しく処理されないようです。
「Wi-Fi」の一語にトークナイズされてほしいですが、「Wi」「-」「Fi」の3語
にトークナイズされています。

mysql> select mroonga_command('tokenize TokenMecab "Wi-Fi"');
+-----------------------------------------------------------------------------------------------------------------------------------------------------+
| mroonga_command('tokenize TokenMecab "Wi-Fi"')

      |
+-----------------------------------------------------------------------------------------------------------------------------------------------------+
|
[{"value":"Wi","position":0,"force_prefix":false},{"value":"-","position":1,"force_prefix":false},{"value":"Fi","position":2,"force_prefix":false}]
|
+-----------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)


ただ、groongaコマンドを実行すると、以下となります。

$ groonga
> tokenize TokenMecab "Wi-Fi"
[[0,1457600181.14795,0.000496864318847656],[{"value":"Wi-Fi","position":0,"force_prefix":false}]]

期待通り一語でトークナイズされています。

ということはやはり、mroongaでのインデックスの更新ができていない、という
ことなのでしょうか?

上記のやり方

ALTER TABLE contents DISABLE KEYS;
ALTER TABLE contents ENABLE KEYS;

や

ALTER TABLE contents DROP INDEX content, ADD FULLTEXT INDEX (content)
COMMENT 'normalizer "NormalizerAuto", parser "TokenMecab"';
(こちらも試しました)

でないようでしたら、その方法を教えていただければ幸いです。
たびたびすみませんが、よろしくお願いします。


On 2016/03/08 22:45, Kouhei Sutou wrote:
> 須藤です。
> 
> In <56DD5****@webmk*****>
>    "[groonga-dev,03971] MeCabの辞書について" on Mon, 7 Mar 2016 18:55:39 +0900,
>    "info****@webmk*****" <info****@webmk*****> wrote:
> 
>> (メーリングリストのアーカイブが簡単に検索できればいいのですが...)
> 
> ですよねぇ。。。
> 
>> 1.Mroongaで使用している辞書ファイルの場所はどのように調べればいいで
>> しょうか?(サーバーに辞書が複数インストールされており、どの辞書が使われ
>> ているかをMroongaの設定から把握したいです)
> 
> MroongaはMeCabのデフォルトの設定を利用します。
> そのため、/etc/mecabrcなどMeCabの設定ファイルを参照してくだ
> さい。
> 
> ただ、MeCabのデフォルトの設定を使うため、Mroongaの設定からど
> の辞書を使っているかは判断できません。
> 
>> 2.辞書への単語の追加(ユーザー辞書)は、一般的なMeCabの単語の追加方法
>> と同じように行えばいいでしょうか?もし何か注意すべき点がありましたらご教
>> 授願えればと思います。
>>
>> ※一般的なMeCabの単語の追加方法とは、例えばこのような方法です
>> https://mecab.googlecode.com/svn/trunk/mecab/doc/dic.html
> 
> 一般的な方法で問題ありません。
> 
> 注意事項は辞書を更新した後はインデックスを再作成する必要があ
> るということです。
> 
> そうしないと、辞書更新前に作ったインデックスを使ってしまうか
> らです。
> 
> 
> ただ、そうすると辞書更新のコストが上がってしまうため、必要最
> 小限のレコードだけ更新したくなります。そのために↓の仕組みを
> 考えているのですが、まだ手を動かせていません。
> 
> 単語Aを登録するとした場合:
> 
>    1. TokenMecabでインデックスを張っているカラムに対し、
>       TokenBigramSplitSymbolAlphaのインデックスIも作成する
> 
>    2. インデックスIで単語Aを検索し、単語Aを登録したときに影響
>       のあるレコードを抽出する
>       ポイント:TokenBigramSplitSYmbolAlphaを使うと漏れのない
>       検索ができる
> 
>    3. 辞書にAを追加する
> 
>    4. 2.で見つけたレコードに対してだけTokenMecabのインデック
>       スを更新する
> 
>       4.1 Aを登録する前の辞書でトークナイズして、該当トークン
>           をインデックスから削除する
> 
>       4.2 Aを登録後の辞書でトークナイズして、該当トークンをイ
>           ンデックスに追加する
> 
> 4.1, 4.2を実現できるようにMroonga(Groonga)で同時に複数の
> MeCabの辞書を扱えるようにしないとなぁと思っています。
> 
> 




groonga-dev メーリングリストの案内
Back to archive index