Kouhei Sutou
kou****@clear*****
2013年 8月 6日 (火) 18:18:34 JST
須藤です。 In <CANM+HhdF+uZ2A-Tknc67SKQ41UB7dnkgeadAF0_dNd88****@mail*****> "[groonga-dev,01571] groongaのトークナイザの改善について" on Mon, 5 Aug 2013 18:24:33 +0900, Naoya Murakami <visio****@gmail*****> wrote: > 日本語の場合、漏れのないという観点の利点がありますが、英語のみのテーブルで、 > TokenBigramSplitSymbolAlphaDigitを使うのは、性能の観点からもったいない気がしています。 たしかにそうですね。 SplitXXX系のトークナイザーは検索漏れは少なくなりますが、性能 面の性能低下や誤検出の増加というデメリットがあるため、トレー ドオフの関係にあります。 > <質問> > (1)TokenBigram、TokenTrigram等において、4Kbyteの制限以上となる長い記号列が出現した場合に > 無視または所定の文字数でカットするようトークナイザに実装していただくのは可能でしょうか? > これにより、長い記号列が出現する文章であっても、原則、空白区切りでトークナイズできるため、 > 英語文書での飛躍的な性能向上につながり、非常にうれしいです。 あぁ、たしかにこれはよさそうな妥協点に思えます。実装も難しく ないですし。 検討してみます。 > (2)これは、願望なのですが、英文を空白区切りでトークナイズした場合、トークン数が > 減る一方、複数系等のゆらぎ(These are cars.は、TokenBigramSplitSymbolAlphaの場合、 > carsで検索しないとヒットしない。)に対応できなくなると思います。 > 空白区切りでトークナイズしても複数系や活用形が原型で検索できるよう、ゆらぎを > 原型にするトークナイザがあると素敵だなと考えました。 > Apache Luceneは、以下のようなフィルタがあるようですが、 > 今後、groongaでこのあたりの機能の実装の展開の予定はないですか? > http://www.mwsoft.jp/programming/lucene/lucene_filter.html > http://www.mwsoft.jp/programming/hadoop/mapreduce_with_lucene_filter.html この機能、あると嬉しいですよね! やりたいとは思っているのですが、スッキリした実現方法が浮かば ずにずるずるという感じです。 もう一度検討してみます! > (3)トークナイザを自作するのは以下のチケットの通り、今も難しいままでしょうか? > http://redmine.groonga.org/issues/1257 この頃よりは簡単になり、ドキュメントも揃えたのですが、Cの知識 が必要なのは相変わらずなので敷居は高いかなぁという印象です。 参考: * トークナイザーを作るために使うAPI https://github.com/groonga/groonga/blob/master/include/groonga/tokenizer.h * トークナイザーの実装例(TokenMecab) https://github.com/groonga/groonga/blob/master/plugins/tokenizers/mecab.c mrubyという組み込み向けのRuby実装をgroongaに組み込もうという 作業を進めつつ停滞しつつという感じでやっているのですが、それ ができたらRubyでトークナイザーを書けるようになりさらに敷居が 下がると思っています。 もし、トークナイザーの自作も視野にあるということであれば、 チュートリアルのようなドキュメントを作ろうかと思いますので、 遠慮なく言ってもらえればと思います。 -- 須藤 功平 <kou****@clear*****> 株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270) groongaサポート: http://groonga.org/ja/support/ パッチ採用はじめました: http://www.clear-code.com/recruitment/ コミットへのコメントサービスはじめました: http://www.clear-code.com/services/commit-comment.html