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

Back to archive index

Kouhei Sutou kou****@clear*****
2014年 8月 29日 (金) 22:43:17 JST


須藤です。

In <CANM+HheCT2DyOBriDv3PSF7kTNrVJYMYeuphWBSAM+k=dZYtD****@mail*****>
  "[groonga-dev,02714] GroongaのNgram/Delimitトークナイザーに機能追加したプラグインの紹介" on Fri, 29 Aug 2014 21:25:35 +0900,
  Naoya Murakami <visio****@gmail*****> wrote:

> 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とかいろいろな機能を指定できるようになっていま
> す。
> 
> 組合せ数がかなり多くなるため、最初にコマンドを使って必要な
> 機能のみを組み合わせてトークナイザを登録させる仕組みにし
> ています。

いやぁ、この実装方法の発想はなかったです。
たしかに、これでパラメーターを動的にカスタマイズできますね!

ストップワードやステミングはトークナイザーに依存せずに使えそ
うなので、Groonga本体でサポートするのがいい気がしました。
Groonga本体でサポートしていればgrndumpも対応できますし。

森さん、どう思いますか?
この実装方法でなじませられるかはまだわかっていませんが。。。


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

すごいです!

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

ぜひいろんな人に試してもらって感想を聞きたいです!


-- 
須藤 功平 <kou****@clear*****>
株式会社クリアコード <http://www.clear-code.com/>

Groongaベースの全文検索システムを総合サポート:
  http://groonga.org/ja/support/
パッチ採用 - プログラミングが楽しい人向けの採用プロセス:
  http://www.clear-code.com/recruitment/
コードリーダー育成支援 - 自然とリーダブルコードを書くチームへ:
  http://www.clear-code.com/services/code-reader/




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