module Recommendations class User module Suggestions def suggestions Recommendations.redis.hgetall("recommendations:suggestions:user:#{id}") .select {|key, value| Float(value) > 0} end def update_suggestions ratings = self.ratings suggestions = ratings.inject({}) do |buffer, (item_id, score)| similars = Item.find(item_id).similars similars.reject! {|i| ratings.key?(i)} similars.each do |similar| buffer[similar] ||= 0 buffer[similar] += (Float(score) - 3) # 0..5 score => -2..2 end buffer end # #self.similars.each do |similar| #similars users #remover os ratings q o usuário já fez # similar_ratings = User.new(similar).ratings # similar_ratings.reject! {|i| ratings.key?(i.key)} # similar_ratings.each do |(item_id, score)| #user ratings # suggestions[item_id] ||= 0 # suggestions[item_id] += (Float(score) - 3) # 0..5 score => -2..2 # end # end # Recommendations.redis.hmset("recommendations:suggestions:user:#{id}", *suggestions.flatten) end end end end