[groonga-dev,01581] Re: groongaのトークナイザの改善について

Back to archive index

Naoya Murakami visio****@gmail*****
2013年 8月 7日 (水) 23:34:04 JST


お世話になっております。村上です。

ぬああああ、サンプルまでわざわざつくっていただいて、
至れり尽くせりでどうもありがとうございます。

非常に助かります。参考にしてつくってみたいと思います。

とりあえず、喫緊で、TokenBigramを所定の文字以下で切れるようにして、
mroongaでインデックスを構築したいので、これを実装したいと思います。
(公式にご対応を検討していただけるとのことですが、データサイズが大きく
インデックスの構築にすごい時間がかかるので、できるだけ早くはじめたい
と思っていまして。。)

少し、落ち着いたら、今まで培ったノウハウや、懇切に教えていただいた内容は、
blog等で情報発信してgroonga、mroongaの普及のお手伝いになればと思ってます!


以上、よろしくお願いします。



2013年8月7日 23:12 Kouhei Sutou <kou****@clear*****>:

> 須藤です。
>
> In <CANM+****@mail*****>
>   "[groonga-dev,01577] Re: groongaのトークナイザの改善について" on Wed, 7 Aug 2013
> 08:37:29 +0900,
>   Naoya Murakami <visio****@gmail*****> wrote:
>
> > プログラミングの知識は、大学でかじった程度ですが、所定以上の長さ以上にならないように
> > 切り出す処理を追加するのは、groonga/lib/token.cをみると、
> > ngram_next内の353,365行目とかの、GRN_STR_ISBLANKとかでbreakしているのをまねて、
> > 所定の長さ以上になったらbreakするみたいな感じですかね?
> > https://github.com/groonga/groonga/blob/master/lib/token.c
>
> そうですね。そんな感じでいけると思います。
> そのときのバイト数はcl - rでとれるので、それを使うとよいと思
> います。
>
> >
> token.cのngramのトークナイザをpluginにしてみて、適当にいじってみて遊ぼうかなあ、と思ったのですが、Cのpluginの開発について無知のため、トークナイザpluginのビルド方法について教えてください。
> >
> > 以下のような手順で問題なかったでしょうか?
> >
> > 1.groonga/plugin/tokenizerに<トークナイザ>.cを作る。
> > 2.groonga/plugin/tokenizer/に<トークナイザ>_sources.amを作る。
> > 3.groonga/plugin/tokenizer/Makefile.amを修正する。
> > 4.groonga/configure.acを修正する。
> > 5.sh autogen.shにより、configureを生成する。
> > 6. ./configure CFLAGS="-O0 -g3" CXXFLAGS="-O0
> -g3"する。(とりあえず、テストのため、最適化OFF)
> > 7. make→make install
>
> はい、groongaのパッケージの中にいれる場合はそれで大丈夫です。
> ただ、そうするとgroongaがバージョンアップしたらそのたびに
> Makefile.amの修正などをしないといけなくなりメンテナンスが面
> 倒になると思います。
>
> groongaは別パッケージとしてトークナイザーを作ることができます。
> ただ、これだけだとどうやるかわからないと思うので、1文字毎にトー
> クナイズするサンプルトークナイザーを作ってみました。ライセン
> スはパブリックドメインにしたので好きなようにコピーしたりして
> 構いません。
>
>   https://github.com/groonga/groonga-tokenizer-sample
>
> 以下のようにビルド・インストールできます。
>
>   % git clone https://github.com/groonga/groonga-tokenizer-sample.git
>   % cd groonga-tokenizer-sample
>   % ./autogen.sh
>   % ./configure
>   % make
>   % sudo make install
>
> テストもつけてあって、以下のようにすると実行できます。
> (Ruby 1.9以上がインストールされている必要があります。)
>
>   % test/run-test.sh
>
> たぶん、こまかく挙動を確認したいと思うので便利だと思います。
>
> テストツールはgrntestというもので↓に細かい説明があります。
>
>   https://github.com/groonga/grntest
>
> ざっくりいうと、こんな感じでテストを追加します。
>
>   1. test/suite/${テスト名}.testを作り、その中にgroongaのコマンドを書く。
>   2. test/run-test.shを実行する。
>   3. .testの中のコマンドを実行した結果が
>      test/suite/${テスト名}.actualにできるので中身を確認する。
>   4. 中身が期待した結果だったら拡張子を.actualから.expected
>      に変える。
>   5. test/run-test.shを実行し、緑色になったらOK。
>
>
> 他、細かい説明は時間がとれたらしたいなぁと思いますが、
> tokenizers/sample.cのsample_XXX()をいじるといいです。groonga
> のlib/token.cのライセンスはLGPLv2なので、作ったものもLGPLv2
> にすればlib/token.cをベースに作ってもOKです!
>
>
> あと、もっと本格的なプラグインパッケージの作り方は
> groonga-normalizer-mysqlが実例になります。こっちはトークナイ
> ザーではなくノーマライザーですが、プラグインという観点では同
> じなので共通で使えるものがいろいろあります。
>
>   https://github.com/groonga/groonga-normalizer-mysql
>
> >
> 昨日は、<トークナイザ>.la,lo,oファイルが生成されるところまで確認しましたが、goongaでtokenizeコマンドを実行しても、unknown
> > tokenizerといわれたところでつまりました。
>
> プラグインなので、使う前にregisterコマンドでgroongaに登録す
> る必要があります。
>
> たとえば、tokenizers/sample.soを読み込む場合は以下のようにな
> ります。
>
>   > register tokenizers/sample
>
> 参考: http://groonga.org/ja/docs/reference/commands/register.html
>
> registerすれば使えるようになるはずです!
>
>
> # だれか、groongaのプラグインの作り方勉強会を主催して。。。
>
>
> --
> 須藤 功平 <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
>
> _______________________________________________
> groonga-dev mailing list
> groon****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/groonga-dev
>



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