プラグインの開発

このページでは、プラグイン開発の方法を説明する。

Jubatus はユーザーが C++ でプラグインを開発することで、様々な拡張ができるようになっている。

特に、データ変換エンジンではユーザーが任意の変換ロジックを組み込めるように、各モジュール用のプラグインを作ることができる。

データ変換プラグイン

fv_converter プラグインの開発は以下の手順で行う。

  1. jubatus/core/plugin.hpp をインクルードする。
  2. プラグインのひな形となる基底クラスを継承し、必要な特徴抽出モジュールまたはフィルターモジュールを実装する。
  3. 実装したクラスのインスタンスを生成し、そのポインタを返却する関数を作成する。 この関数は C コードから見えるように extern "C" で囲う必要がある。 この関数の名前が、fv_converter でプラグインを利用するときに指定する "function" 引数の中身である。

例として、文字列からの特徴量抽出 (string_types) 用のプラグインの作り方を示す。

この場合、継承すべきひな形は jubatus::core::fv_converter::word_splitter クラスである。 word_splitter クラスは文字列を引数に取り、その文字列を分割して各パーツの分割点を返す split というメンバ関数のみからなる。 分割点は size_t のペアのベクタである。一つ目の値はそのパーツの開始位置であり、二つ目の値はそのパーツの長さを表す。

以下にコード例を示す。

#include <jubatus/core/plugin.hpp>
#include <map>

using namespace std;

class my_splitter : public jubatus::core::fv_converter::word_splitter {
 public:
   void split(const string& string,
              vector<pair<size_t, size_t> >& ret_boundaries) const {
    // do something
  }
};

extern "C" {
  my_splitter* create(const map<string, string>& params) {
    return new my_splitter();
  }
}

上記のファイルをコンパイルし、 libjubaconverter.so とリンクすることで、プラグイン (共有ライブラリ (.so)) が作成される。 プラグインとして利用する方法は、 プラグイン を参照のこと。

その他の特徴抽出器やフィルターのプラグインも、同様の方法で作成することができる。 より具体的なソースの例に関しては、Jubatus ソース内の jubatus/core/fv_converter 中の test_*.cpp を参照すること。

プラグインの開発を行う場合、 プラグイン開発用スケルトンプロジェクト を使用すると便利である。 このスケルトンでは、渡された文字列から ASCII 文字列を特徴量として抽出する機能が既に実装されている。