class Recommendify::Base
Attributes
input_matrices[R]
similarity_matrix[R]
Public Class Methods
input_matrices()
click to toggle source
# File lib/recommendify/base.rb, line 17 def self.input_matrices @@input_matrices end
input_matrix(key, opts)
click to toggle source
# File lib/recommendify/base.rb, line 13 def self.input_matrix(key, opts) @@input_matrices[key] = opts end
max_neighbors(n=nil)
click to toggle source
# File lib/recommendify/base.rb, line 8 def self.max_neighbors(n=nil) return @@max_neighbors unless n @@max_neighbors = n end
new()
click to toggle source
# File lib/recommendify/base.rb, line 21 def initialize @input_matrices = Hash[self.class.input_matrices.map{ |key, opts| opts.merge!(:key => key, :redis_prefix => redis_prefix) [ key, Recommendify::InputMatrix.create(opts) ] }] @similarity_matrix = Recommendify::SimilarityMatrix.new( :max_neighbors => max_neighbors, :key => :similarities, :redis_prefix => redis_prefix ) end
Public Instance Methods
all_items()
click to toggle source
# File lib/recommendify/base.rb, line 53 def all_items @input_matrices.map{ |k,m| m.all_items }.flatten.uniq end
delete_item!(item_id)
click to toggle source
# File lib/recommendify/base.rb, line 80 def delete_item!(item_id) input_matrices.map do |k,m| m.delete_item(item_id) end end
for(item_id)
click to toggle source
# File lib/recommendify/base.rb, line 57 def for(item_id) similarity_matrix[item_id].map do |item_id, similarity| Recommendify::Neighbor.new( :item_id => item_id, :similarity => similarity ) end.sort end
max_neighbors()
click to toggle source
# File lib/recommendify/base.rb, line 37 def max_neighbors self.class.max_neighbors || Recommendify::DEFAULT_MAX_NEIGHBORS end
method_missing(method, *args)
click to toggle source
# File lib/recommendify/base.rb, line 41 def method_missing(method, *args) if @input_matrices.has_key?(method) @input_matrices[method] else raise NoMethodError.new(method.to_s) end end
process!()
click to toggle source
# File lib/recommendify/base.rb, line 66 def process! all_items.each{ |item_id,n| process_item!(item_id) } end
process_item!(item_id)
click to toggle source
# File lib/recommendify/base.rb, line 70 def process_item!(item_id) input_matrices.map do |k,m| neighbors = m.similarities_for(item_id).map do |i,w| [i,w*m.weight] end similarity_matrix.update(item_id, neighbors) end similarity_matrix.commit_item!(item_id) end
redis_prefix()
click to toggle source
# File lib/recommendify/base.rb, line 33 def redis_prefix "recommendify" end
respond_to?(method)
click to toggle source
Calls superclass method
# File lib/recommendify/base.rb, line 49 def respond_to?(method) @input_matrices.has_key?(method) ? true : super end