人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

レコメンド(推薦)機能をRubyで実装したいです。教えてください。

人をフォローするシステムがあって、ユーザーの嗜好にあった人をリコメンドする処理を実装したいです。

あるユーザー(Aさん)と同じような人をフォローしている人がいて(Bさん)、Bさんがフォローしているけど、Aさんがフォローしていない人を提案する。 という処理がすぐ思いつきます。

私が欲しい情報は、Rubyで上記を実装するための、ズバリのコード(ライブラリ)があればベストです。

または、上記方法以外に良い方法があれば、ご提案ください。

参考サイト、書籍、Ruby以外の他言語でのコードなど参考情報があれば教えてください。

フォローしていない人に、推薦度のような数値を設定して、上記5人ぐらいを推薦する... そんな感じでしょうか? 現在ユーザー数は千人ぐらいで、フォローする「人」も千人ぐらいのシステムです。


●質問者: nemutaiyo
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● だわかき
●0ポイント

Rubyでユーザーがフォローしているユーザーのリストを取得する方法
http://opentechnica.blogspot.jp/2012/01/rubytwitter.html


nemutaiyoさんのコメント
私の説明が不足してましたね。 フォローと書きましたが、Twitterとは関係ありません。

2 ● a-kuma3
●75ポイント

Ruby のコード、というか、アルゴリズムの話ですよね。
こんなのを考えてみました。
自分と似たようなフォローをしている人を洗い出して、その人がフォローしているけど、自分がフォローしていない人をレコメンド候補とする。
# 文章で書くと、当たり前すぎる?

以下、こんな想定です。

# フォローしている人の一致している数をカウントする
userMap.each { |k, v|
 if v != me then
 v.same_follows = (v.follows & me.follows).size
 else
 v.same_follows = 0
 end
}

# フォローしている人が一致した数の多い順で、先頭 10人(適当)
map = Hash.new
(userMap.values.sort_by { |a| a.same_follows }).last(10).reverse_each { |similar|
 # 自分がフォローしていない人をカウントアップ
 (similar.follows - me.follows).each { |user|
 if map[ user.id ].nil? then
 map[ user.id ] = 1
 else
 map[ user.id ] += 1
 end
 }
}

# 多い順に、上位五名をレコメンド候補
map.sort { |a, b| a[1] <=> b[1] }.last(5).reverse_each { |rec|
 puts "user: #{rec[0]} --- #{rec[1]}"
}

と、こういうことでしょうか?

# 動かしてません。擬似コードだと思ってください


3 ● ニコ
●75ポイント

参考に
http://parrot.hatenadiary.jp/entry/20100918/1284802443


4 ● boost_beast
●75ポイント

http://www.moongift.jp/2012/03/20120305-5/

こちらが参考になると思います。


5 ● ニコ
●75ポイント

こんなのも参考に
http://recommend.submit.ne.jp/?adtype=gl5&gclid=CL724NmOsrcCFaJLpgodMRoAug

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ