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