Kouhei Sutou
kou****@clear*****
2013年 8月 7日 (水) 23:12:06 JST
須藤です。 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