人をフォローするシステムがあって、ユーザーの嗜好にあった人をリコメンドする処理を実装したいです。
あるユーザー(Aさん)と同じような人をフォローしている人がいて(Bさん)、Bさんがフォローしているけど、Aさんがフォローしていない人を提案する。 という処理がすぐ思いつきます。
私が欲しい情報は、Rubyで上記を実装するための、ズバリのコード(ライブラリ)があればベストです。
または、上記方法以外に良い方法があれば、ご提案ください。
参考サイト、書籍、Ruby以外の他言語でのコードなど参考情報があれば教えてください。
フォローしていない人に、推薦度のような数値を設定して、上記5人ぐらいを推薦する... そんな感じでしょうか? 現在ユーザー数は千人ぐらいで、フォローする「人」も千人ぐらいのシステムです。
Rubyでユーザーがフォローしているユーザーのリストを取得する方法
http://opentechnica.blogspot.jp/2012/01/rubytwitter.html
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]}" }
と、こういうことでしょうか?
# 動かしてません。擬似コードだと思ってください
私の説明が不足してましたね。
2013/05/19 08:44:29フォローと書きましたが、Twitterとは関係ありません。