fess-ingest-*の追加

クロールしている内容をインデクスする前にファイルに保存したり、書き換えたりとかしたくなったので、Fess Ingest機能を追加しました(名前はElasticsearchのIngest Nodeっぽくしたけど、機能的には関連性はありません…)。

とりあえず、サンプル的にログに内容を出力するシンプルなfess-ingest-loggerを作りました。必要なものはsrc/main以下にあるファイルくらいなので、説明するまでもない量ですね。クロールについては、Web/ファイルシステムとデータストアは仕組みが異なるため、それぞれのprocessメッソドを実装する必要があります。

あとは、mvn packageとかすれば、target以下にjarファイルができるので、それをFessのプラグイン画面からアップロードすると、fess-ingestとして認識されて、あとはクロール時に読み込まれて使われます。

という感じで、次のリリースにこれが入ります。

Fione 13.7.0のリリース

Fione 13.7.0をリリースしました。他にもまだ実装したかったものもあるのですが、h2o-3が次のバージョンがリリースされてしまっていたり、定期リリースは必要かなと思ったり、とかでリリースした感じです。今回のリリースではPythonモジュールがいろいろと追加したので、画面上からデータフレームの操作がいろいろとできるようになりました。あとはテキストをトークナイズすることもできるようになり、Word2Vecも実行することができるようになっています。任意のPythonを追加できるようになったので、helloworld.templateを参考に.pyファイルを作成して、システムからモジュールのアップロード実行することで追加されます(Fione>AutoMLでメニューに表示されるようになる)。

という感じで、今回はPythonモジュールを増やしましたが、もっと増やしていきたいとは考えています。まだドキュメントがないけど、興味がある方は作ってみてもらえると嬉しいです。次のリリースでは、実行したモジュール群を繋げてパイプライン実行できるようなバッチをダウンロードできるような機能を提供したいと考えています。これがあれば、Fioneでポチポチと画面で実行した内容をバッチ処理化できるようになるので、別なシステムに組み込んだりがしやすくなるかと考えています。

h2o-3で日本語のトークナイズ

h2o.aiのH2OFrameにtokenizeがあるけど、これは正規表現で区切って、単語分割を実現してくれる。がしかし、日本語だと全く持って役に立たない…。でも、日本語を何とかしたい、でググってもPythonの世界にデータを持ってきて処理したりするのはあるがイマイチ期待する解決策でもない…。

ということで、どうしたものかと思い、Fione環境であればElasticsearchもあるので、ElasticsearchのAnalyze APIを用いて、単語分割を実現することにした。Fione環境だと、さらにFessの設定も使えるので、japanese_analyzerとかもあるので、これを呼べるようにすれば解決なわけである。

H2OFrameに新たなメソッドを生やすのも面倒なので、既存のtokenizeにtokenize:elasticsearch:urlみたいな文字列を渡されたら、ElasticsearchのAnalyze APIを呼んで、単語分割することにした。ということをやってくれるElasticsearchTokeinzerパッチがこれ

という感じで、これで、Python側にデータを持ってこないで、h2oのMRTaskの世界で処理ができるようになったので、ひとまず、解決。これで、Fioneで日本語をWord2Vecできるようになったはず。(素のh2oで使う場合は別途elasticsearchを用意するか、tokenizerをそんな感じで作るかかな…)