livedoorで作られたレコメンドエンジンのcicindelaを使ってみる。
mod_perl + apacheな環境で動かすチュートリアルがあったのでそれに従う。
なんだかんだperlに触るのが、学生時代以来で
めっちゃハマりまくったのでメモ残します。
perlのインストール
最初はシステムPerl(5.10系) + yumでcpanモジュール入れて構築してたけど
極力新しいバージョン使いたかったのでperlbrewでもうちょい新しいやつを入れます。
$ curl -L http://xrl.us/perlbrewinstall | bash // perlbrewにパスを通す $ vi ~/.bashrc source ~/perl5/perlbrew/etc/bashrc // 追記 // インストール可能なバージョンを表示 $ perlbrew available // インストール $ perlbrew -v install perl-5.18.4 -D ccflags=-fPIC // mod_perlのビルドのためにccflagsオプション必須 // バージョン切り替え $ perlbrew list // インストール済みのバージョンを確認 $ perlbrew switch perl-5.18.4 // perlbrewで入れたPerlにパスを通す export PATH=ホームディレクトリ/perl5/perlbrew/perls/perl-xxx/bin:$PATH $ perl -v // バージョンが5.18.4ならOK
cpanmのインストール
perlbrewでcpanmもインストールできる
$ perlbrew install-cpanm
mod_perlのビルド
最初この手順すっ飛ばしてたので
apacheがぜんぜんperlbrewで入れたバージョンのperl読みにいってくれなくて悩んだ。
$ wget http://ftp.jaist.ac.jp/pub/apache/perl/mod_perl-2.0.8.tar.gz $ tar -zxvf mod_perl-2.0.8.tar.gz $ cd mod_perl-2.0.8 $ perl Makefile.PL USE_APXS=1 WITH_APXS=/usr/sbin/apxs EVERYTHING=1 $ make $ make test # make install
オプションで指定しているapxsについて何も知識がなかったので下記記事を参考にさせてもらいました。
apxsとは | For Want Of A Better Word
apxsコマンドでApacheにモジュールを追加 : ブログというか、メモ?(引っ越しました)
cicindelaの環境構築
// mysqlのインストール # yum install mysql-community-devel mysql-community-server --enablerepo=mysql56-community # service mysqld start // 依存モジュールのインストール $ cpanm --sudo DBI DBD::mysql Ima::DBI Time::Piece Log::Log4perl Module::Pluggable Class::Singleton // cicindelaのチェックアウト $ cd /home # svn checkout http://cicindela2.googlecode.com/svn/trunk/ cicindela // my.cnfとhttpd.confの修正 $ ln -s /home/cicindela/etc/mysql/my.cnf /usr/local/mysql/my.cnf # vi /etc/httpd/conf/httpd.conf Include /home/cicindela/etc/httpd/modperl.conf // 追記 // ハードコードされたperlのパスの変更 $ cd cicindela/misc # perl substitute_project_paths.pl --perl_path=ホームディレクトリ/perl5/perlbrew/perls/perl-5.18.4/bin/perl // デモデータのチェックアウト # svn switch http://cicindela2.googlecode.com/svn/branches/demo_data/misc misc // データベースの作成 $ cd /home/cicindela/misc $ perl create_init_sql.pl --db_name=cicindela | /usr/local/mysql/bin/mysql -uroot // ロードスクリプトに必要なモジュールのインストール $ cpanm Text::CSV_XS // ロードスクリプトに必要なファイルの生成 $ cd clip_data # touch pages.txt clips.txt tags.txt # chmod 766 *.txt
ここでチュートリアルではimporter.plを動かすんですが
僕の環境ではエラー吐いたので修正
if ($tags) { # utf8フラグをoff $tags = Encode::_utf8_off($tags); for my $tag (split(/\s+/, Encode::decode('utf8', $tags))) { my $tag_id = ($tag_hash->{$tag} or $tag_hash->{$tag} = ++$last_tag_id); print TAGS_OUT join("\t", $tag_id, $user_id, $page_id, $timestamp)."\n"; } }
つづき
// ロードスクリプトを実行 $ gzip -cd ldclip_demo_dataset.csv.gz | perl importer.pl --work_dir=`pwd` | mysql -uroot cicindela // 設定の変更 DB名とユーザー名とパスワードを変更 # vi lib/Cicindela/Config/_common.pm // レコメンド集計バッチ実行 # bin/batch.pl --track=1 // 2回実行。このパスで実行しないとエラーを吐く
動作確認
# service httpd start
ブラウザから
http://サーバーのIP/cicindela/recommend?op=for_item&set=clip_simple&item_id=39102
にアクセスするとレコメンド結果のitem_idが一覧で表示される。
おつかれさまでした。