Class: Predictor::InputMatrix

Inherits:
Object
  • Object
show all
Defined in:
lib/predictor/input_matrix.rb

Instance Method Summary collapse

Constructor Details

#initialize(opts) ⇒ InputMatrix

Returns a new instance of InputMatrix.



3
4
5
# File 'lib/predictor/input_matrix.rb', line 3

def initialize(opts)
  @opts = opts
end

Instance Method Details

#add_set(set, items) ⇒ Object



26
27
28
# File 'lib/predictor/input_matrix.rb', line 26

def add_set(set, items)
  add_to_set(set, *items)
end

#add_single(set, item) ⇒ Object



30
31
32
# File 'lib/predictor/input_matrix.rb', line 30

def add_single(set, item)
  add_to_set(set, item)
end

#add_to_set(set, *items) ⇒ Object



19
20
21
22
23
24
# File 'lib/predictor/input_matrix.rb', line 19

def add_to_set(set, *items)
  items = items.flatten if items.count == 1 && items[0].is_a?(Array)
  Predictor.redis.multi do
    items.each { |item| add_single_nomulti(set, item) }
  end
end

#calculate_jaccard(item1, item2) ⇒ Object



67
68
69
70
# File 'lib/predictor/input_matrix.rb', line 67

def calculate_jaccard(item1, item2)
  warn 'InputMatrix#calculate_jaccard is now deprecated. Use InputMatrix#score instead'
  Distance.jaccard_index(redis_key(:sets, item1), redis_key(:sets, item2), Predictor.redis)
end

#delete_item(item) ⇒ Object

delete item from the matrix



49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/predictor/input_matrix.rb', line 49

def delete_item(item)
  Predictor.redis.watch(redis_key(:sets, item)) do
    sets = Predictor.redis.smembers(redis_key(:sets, item))
    Predictor.redis.multi do |multi|
      sets.each do |set|
        multi.srem(redis_key(:items, set), item)
      end

      multi.del redis_key(:sets, item)
    end
  end
end

#items_for(set) ⇒ Object



34
35
36
# File 'lib/predictor/input_matrix.rb', line 34

def items_for(set)
  Predictor.redis.smembers redis_key(:items, set)
end

#parent_redis_key(*append) ⇒ Object



7
8
9
# File 'lib/predictor/input_matrix.rb', line 7

def parent_redis_key(*append)
  ([@opts.fetch(:redis_prefix)] + append).flatten.compact.join(":")
end

#redis_key(*append) ⇒ Object



11
12
13
# File 'lib/predictor/input_matrix.rb', line 11

def redis_key(*append)
  ([@opts.fetch(:redis_prefix), @opts.fetch(:key)] + append).flatten.compact.join(":")
end


42
43
44
45
46
# File 'lib/predictor/input_matrix.rb', line 42

def related_items(item)
  sets = Predictor.redis.smembers(redis_key(:sets, item))
  keys = sets.map { |set| redis_key(:items, set) }
  keys.length > 0 ? Predictor.redis.sunion(keys) - [item.to_s] : []
end

#score(item1, item2) ⇒ Object



62
63
64
65
# File 'lib/predictor/input_matrix.rb', line 62

def score(item1, item2)
  measure_name = @opts.fetch(:measure, :jaccard_index)
  Distance.send(measure_name, redis_key(:sets, item1), redis_key(:sets, item2), Predictor.redis)
end

#sets_for(item) ⇒ Object



38
39
40
# File 'lib/predictor/input_matrix.rb', line 38

def sets_for(item)
  Predictor.redis.sunion redis_key(:sets, item)
end

#weightObject



15
16
17
# File 'lib/predictor/input_matrix.rb', line 15

def weight
  (@opts[:weight] || 1).to_f
end