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のベクターカラム の区切り文字の変更に使っています。空白だと英語がうまくいかな いので。。 以上です。