[groonga-dev,02714] GroongaのNgram/Delimitトークナイザーに機能追加したプラグインの紹介

Back to archive index

Naoya Murakami visio****@gmail*****
2014年 8月 29日 (金) 21:25:35 JST


Groongaユーザーの村上と申します。

GroongaのNgramトークナイザーにいろいろ機能を付け加えたトークナイザー
プラグインを作ってみました。

・Yet another ngram tokenizer plugin for Groonga
https://github.com/naoa/groonga-tokenizer-yangram

主な機能は検索時のみオーバーラップをしないようにしたことです。
これによりトークンの比較回数が減り検索に(ほぼ)影響を与えること
なく検索の効率化を図っています。

NgramのNが大きいほど効果が高く、Bigramの場合は約1.5倍、
Trigramの場合は約2.3倍ほどはやかったです。
オーバーラップをスキップすると空白の有無が正しくとれなくなる
ケースがあるのですが、ノーマライズ時に空白を除去しないよう
にすれば、区別することができました。Wikipediaを使った実験
ではヒット数のずれがなく検索速度を向上できています。
(その代わり少しインデックスサイズが増えます)

この他、語彙表にストップワードのフラグを示すカラムを作ることに
より検索時のみトークンを飛ばすskip_stopwordや ステミング(英
語の活用形を同一視させる処理)、あらかじめ除外させるトークン
のリストをキーとするテーブルを作って転置索引の対象外とさせるFilterStoptableとかいろいろな機能を指定できるようになっていま
す。

組合せ数がかなり多くなるため、最初にコマンドを使って必要な
機能のみを組み合わせてトークナイザを登録させる仕組みにし
ています。

このため、NgramのNやsplit系とかもかなり自由に指定できるよう
になっています。

CentOS6/7、Debian wheezy/jessie、Ubuntu precise/trustyの
64ビットについては、パッケージを用意しています。
(現状、リポジトリまでは用意していません。。あとFedoraはまだ
4.0.5が更新されていないので、Fedoraはまだつくっていません。)

Ngramトークナイザーで少しでも検索速度を上げたい場合や
ステミングやストップワードの機能を使いたい方は使ってみて
はいかがでしょうか。

ちなみに、Delimitにバリエーションをもたせたものなんてものも
あります。

・Yet another delimited tokenizer plugin for Groonga
https://github.com/naoa/groonga-tokenizer-yadelimit

あまり使う人はいないと思いますが、私はMroongaのベクターカラム
の区切り文字の変更に使っています。空白だと英語がうまくいかな
いので。。

以上です。



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