Class: Recommendify::SimilarityMatrix
- Inherits:
-
Object
- Object
- Recommendify::SimilarityMatrix
- Defined in:
- lib/recommendify/similarity_matrix.rb
Instance Attribute Summary collapse
-
#write_queue ⇒ Object
readonly
Returns the value of attribute write_queue.
Instance Method Summary collapse
- #[](item_id) ⇒ Object
- #commit_item!(item_id) ⇒ Object
-
#initialize(opts = {}) ⇒ SimilarityMatrix
constructor
A new instance of SimilarityMatrix.
- #max_neighbors ⇒ Object
- #redis_key(append = nil) ⇒ Object
-
#retrieve_item(item_id) ⇒ Object
optimize: the items are already stored in a sorted fashion.
- #update(item_id, neighbors) ⇒ Object
Constructor Details
#initialize(opts = {}) ⇒ SimilarityMatrix
Returns a new instance of SimilarityMatrix.
5 6 7 8 |
# File 'lib/recommendify/similarity_matrix.rb', line 5 def initialize(opts={}) @opts = opts @write_queue = Hash.new{ |h,k| h[k] = {} } end |
Instance Attribute Details
#write_queue ⇒ Object (readonly)
Returns the value of attribute write_queue.
3 4 5 |
# File 'lib/recommendify/similarity_matrix.rb', line 3 def write_queue @write_queue end |
Instance Method Details
#[](item_id) ⇒ Object
28 29 30 31 32 33 34 |
# File 'lib/recommendify/similarity_matrix.rb', line 28 def [](item_id) if @write_queue.has_key?(item_id) @write_queue[item_id] else retrieve_item(item_id) end end |
#commit_item!(item_id) ⇒ Object
36 37 38 39 40 |
# File 'lib/recommendify/similarity_matrix.rb', line 36 def commit_item!(item_id) serialized = serialize_item(item_id) Recommendify.redis.hset(redis_key, item_id, serialized) @write_queue.delete(item_id) end |
#max_neighbors ⇒ Object
14 15 16 |
# File 'lib/recommendify/similarity_matrix.rb', line 14 def max_neighbors @opts[:max_neighbors] || Recommendify::DEFAULT_MAX_NEIGHBORS end |
#redis_key(append = nil) ⇒ Object
10 11 12 |
# File 'lib/recommendify/similarity_matrix.rb', line 10 def redis_key(append=nil) [@opts.fetch(:redis_prefix), @opts.fetch(:key), append].flatten.compact.join(":") end |
#retrieve_item(item_id) ⇒ Object
optimize: the items are already stored in a sorted fashion. we shouldn’t throw away this info by storing them in a hash (and re-sorting later). maybe use activesupport’s orderedhash?
45 46 47 48 49 |
# File 'lib/recommendify/similarity_matrix.rb', line 45 def retrieve_item(item_id) data = Recommendify.redis.hget(redis_key, item_id) return {} if data.nil? Hash[data.split("|").map{ |i| (k,s=i.split(":")) && [k,s.to_f] }] end |
#update(item_id, neighbors) ⇒ Object
18 19 20 21 22 23 24 25 26 |
# File 'lib/recommendify/similarity_matrix.rb', line 18 def update(item_id, neighbors) neighbors.each do |neighbor_id, score| if @write_queue[item_id].has_key?(neighbor_id) @write_queue[item_id][neighbor_id] += score else @write_queue[item_id][neighbor_id] = score end end end |