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/