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 >