Plagger::Plugin::Filter::AutoTagging を少し改変しました。
変更内容は以下の通り。
- otsune さんの diff を適用&ちょっと修正 (db省略時処理とMeCab用Encode処理のパフォーマンス改善) < otsune さんThx!
- sub init を plugin.init ハンドラに変更しました。(他のプラグインの初期化処理もそのようになっているようなので……)
実は otsune さんに書いて頂いたdiff をそのまま適用したところうまく動きませんでした。というのも、「db 省略時に id_safe を使ってファイル名を生成するように」とコードを追加されておられるのですが、Plagger::Util::filename_for で $feed が参照できないために動きませんでした。
で、これ自体は単純なミスだと思ってなんとか取り込ませていただこうとしたのですが、otsune さんの意図が「Feed毎に学習できるように」というものなのか、それとも単に「Pluginユニークなdb名を生成したい」からなのか、それともなにか他にもあるのか気になりだして悩んでしまいました。
とりあえず Plagger::Util::filename_for で id_safe が使えるように safe_id と id サブルーチンを実装(というか Plagger::Feed から持ってきた)し、$self->id で $self->plugin_id が返るようにしてお茶を濁しておきましたが、これでは「Feed 毎に学習を分ける」という目的は達成できません。
学習データが完全に共通の場合、特に generate_tags を有効にするとあっというまにラベルがどんどん増えてDBのサイズが膨らんでしまいますし、guess の精度にも影響があるかもしれないので Feed 毎に学習データを分けられる(もちろん共通にもできる)ようにしておいたほうが色々と都合が良いかも?
ちょっと悩みます。
あと、safe_id は Plugin.pm レベルで持っていてもいいような気がしました。でもそんなのは既に議論されていそうだし、私のやり方よりもよい別の実現方法が既に実装されているのかも?
最近 Plagger の事を調べたりプラグインを書くのもご無沙汰だったので分からないことが多いのですが、ボチボチやっていこうと思いますので何かあれば皆様是非ご教授くださいませ。