協調フィルタリングを行うライブラリVogoo PHP LIBを使ってみた

本家は、Vogoo PHP LIB

以下のページを参考に
BUKURO-JIN | レコメンド機能を実装する ~Vogoo! PHP Lib~
ウノウラボ by Zynga Japan: オススメ機能には Vogoo がオススメ
PHPから使えるレコメンデーションエンジン「Vogoo」 - Sometime PHP

Vogoo自体はライブラリとしてだけではなく一つのシステムとして準備されている

インストール

初期設定

1. ライブラリをダウンロードしWebの公開領域に展開する

2. config.phpに書き込み権限を出す

3. 以下のようなURLにアクセスしインストーラーを起動する  
http://domain.jp/path/to/vogoo/install/install.php

※ この際、データを書き込むためにDB接続の情報が必要となる  
※ インストーラ的にはMysqlとPostgresqlのみ対応。  
※ ただし、インストーラはテーブル作成とconfig.phpへのDB接続情報の書き込みを行っているだけなので、別のものへの展開も可能?

使う

評価を追加する

直接vogooを展開したディレクトリにパスを通すとファイル名的に混乱しそうなので敢えてvogooを展開したディレクトリの一階層上のディレクトリでパスを通しておく。

また、requreしたタイミングでvogoo_classのインスタンスである$vogooがグローバル変数として準備されててしまい、クラス内などで呼ぶとスコープが面倒くさくなってしまうので、requireする直前にglobal $vogooを呼び出して大域スコープに切り替えている。  
[経済日記:PHPの変数スコープとクラス - livedoor Blog(ブログ)](http://blog.livedoor.jp/george_george_g/archives/50924096.html)
   <?php  
        global $vogoo;  
        require_once("vogoo/vogoo.php");
  
        // $user_id はint  
        // $item_id はint  
        // $rate    はfloatで0~1の間を取る
  
        $vogoo->set_rating($user_id, $item_id, $rate);  
      ?>  

評価値を再構築する

パスの通し方の問題で、予めcronlinks.phpとcronsloph.phpの中の以下の部分を修正しておく  

修正前
: include ("./vogoo.php");

修正後
: include ("vogoo.php");

また、本来以下はバッチとして実行する部分となる。以下はあくまでサンプル
   <?php  
        global $vogoo;  
        require_once("vogoo/vogoo.php");
  
        // ここで以下のいずれかを実行  
        require_once("vogoo/cronlinks.php");  
        // require_once("vogoo/cronsloph.php");
  
      ?>  
手動で実行する場合は、設置したディレクトリに移動して  
$ php cronlinks.php

レコメンドされている結果を取得する

>|php|  
  <?php  
    global $vogoo;  
    global $vogoo_items;  
    require_once("vogoo/vogoo.php");  
    require_once("vogoo/items.php");

    $user_id = 3;  
    $ret = $vogoo_items->member_get_recommended_items($user_id);  
    print_r($ret);

  ?>  
||<