久しぶりにPlaggerでなんかやってみたくなった

ずっと前から Plagger の最新動向を追うのをやめてしまっていたのですが、しばらくぶりに最新バージョンにアップデートして遊んでみました。

まず Debian でサーバを立て、Plagger を trunk からインストール。なるべく多くのプラグインと依存モジュールを頑張って入れました。Search::Estraier が使ってみたかったので HyperEstraier もインストール。

Search::Estraier に関しては下記のURLを参照のこと。

http://subtech.g.hatena.ne.jp/miyagawa/20060504/1146744042
http://subtech.g.hatena.ne.jp/miyagawa/20060504/1146739431

HyperEstraier をインストールしてマスターを起動し、管理者アカウントとノードを作成。example にあった search.yaml を変更して試してみたらすんなり動きました。イカス。

さらに、形態素解析エンジンの MeCab とその Perl バインディングである Text::MeCab を試してみたくなったのでインストール。MeCab の辞書は UTF-8 へコンバートしました。

んで例の「分かち書き」を試してみるといい感じ。これで各単語数カウントしてベイズ推定使えば日本語でもある程度精度のよいスパム判定とか自動レイティングとかできちゃうんでしょうか?(そんな簡単にはいかないか……)

と思ったけど「そんなの既に誰かやってそうだなあ。ずいぶん長いこと Plagger のこと調べてなかったからよく分からないしなあ。」といういつもの葛藤に苦しみながらも、エイヤとチャレンジしてみることに。

ただ「スパム判定やレイティングは読者が判定や採点した結果を DB に食わせる仕掛けが Plagger とは別に必要だよなあ」などと考えたら面倒くさそうだったので、とりあえずチョイチョイと試せそうな「auto tagging」 に方針転換。(この時点で負け?)

とりあえずベイジアンフィルタは Algorithm::NaiveBayes を利用して、PPF::AutoTagging という名前で実装してみました。Subscribe された entry に既に tag が付与されている場合、entry body を plain text にした上で Text::MeCab を使い形態素解析および単語カウント。その結果を attributes、既に付いている tag を label として train させます。その学習結果を元にして、また解析結果を predict し、重みの順にラベルをタグとしてつければよさげ?

もともとの Feed に tag がついてないとなかなか学習できないので、下記のようなタグを付与するプラグインも併用するといいかもしれないと思い、現在色々実験中。

Filter::BulkfeedsTerms
Filter::Delicious
Filter::HatenaKeywordTag
Filter::HatenaBookmarkTag

でもこれって、自分の書いた Filter::AutoTagging よりも先に適用されているのかどうかは未確認。実験とテスト、デバッグが済んだらまた野良で公開しようと思っていますが、こんなプラグインやっぱり既に誰か書いていそうだなあ……(最後まで弱腰)

Similar Posts: