8/22~23に開催されたJubatus Hackathon with 読売新聞
の成果物です。
レコメンドのチュートリアルを応用して記事レコメンドを作成し実際に利用できる形にしてみました。
- data/
- 今回提供された学習データ(読売新聞オンラインの記事572件)
- extension/
- レコメンドを表示するChrome拡張機能
- analyze.py
- Jubatusのレコメンドを確認するクライアント(テスト用)
- api.py
- Chrome拡張機能とJubatusサーバを中継するAPI
- 拡張機能から渡されたURLをスクレイプしてキーワードを抽出後Jubatusに類似記事をレコメンドさせる
- similar_article.json
- Jubatusサーバの設定ファイル。ほぼチュートリアル通り。
- train_yomiuri.py
- 読売新聞オンラインの記事データをJubatusサーバに学習させるためのクライアント
- 記事データJSON -> 元記事URL復元/本文からキーワード抽出 -> Jubatusに食わせる
Jubatusインストール済みのAMI(jubatus-0.8.1:ami-0c34b20c)を使用しました(公式?)
(publicなのでjubatus
で検索すれば出てくる)
ubuntu
なのでubuntuユーザでログインしてsimilar_article.json
で起動
ポートはデフォルトの9199番を使用。
jubarecommender --configpath similar_article.json
こちらは通常のAmazon Linuxを使用。jubatusクライアントやMeCabをインストールする。
Flaskを使用している。依存ライブラリをインストールしたら下記コマンドで起動。
ポートはデフォルトの5000番を使用。
python api.py
Jubatusサーバに記事データを投入する。
こちらはMacクライアントで実行した。brew/pipでほぼ必要な物は全て入る。
(jubatus,mecab,mecab-pythonなど)
インストールしたら下記コマンドで実行。
python train_yomiuri.py
外部からアクセス可能か試してみる。
パラメータにURLを渡すとJubatusの学習データの中からキーワードに類似した記事を3件返す。
URLと一緒に返すスコアが1に近いほど類似度が高い。
$ curl http://{ホスト名}:5000/?url=http://www.example.com/
{
"articles": [
{
"score": 0.08671099692583084,
"title": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"url": "http://www.yomiuri.co.jp/world/20150819-OYT1T50109.html"
},
{
"score": 0.07412493228912354,
"title": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"url": "http://www.yomiuri.co.jp/economy/20150812-OYT1T50003.html"
},
{
"score": 0.0678844228386879,
"title": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"url": "http://www.yomiuri.co.jp/national/20150816-OYT1T50053.html"
}
],
"keywords": [
"Snippets",
"datetime",
"Python"
]
}
extension
ディレクトリごと拡張機能としてChromeに設定する
あとはpublicアクセス可能な任意のページで拡張機能を開くとレコメンドが表示される
ページのタイトルからキーワードを抽出しているので記事である必要もなし
閲覧したページはJubatusが学習するので次からレコメンドに出てくるようになります
普段pythonをあまり触っていないので色々と参考にさせていただきました。Flask便利。
-
API Server
-
Chrome Extension
-
http://stackoverflow.com/questions/2797853/get-url-and-save-it-chrome-extension