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



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

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

#add_single(set, item) ⇒ Object



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

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

#add_to_set(set, *items) ⇒ Object



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

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

#baseObject



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

def base
  @opts[:base]
end

#calculate_jaccard(item1, item2) ⇒ Object



71
72
73
74
# File 'lib/predictor/input_matrix.rb', line 71

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



53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/predictor/input_matrix.rb', line 53

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



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

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

#parent_redis_key(*append) ⇒ Object



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

def parent_redis_key(*append)
  base.redis_key(*append)
end

#redis_key(*append) ⇒ Object



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

def redis_key(*append)
  base.redis_key(@opts.fetch(:key), *append)
end


46
47
48
49
50
# File 'lib/predictor/input_matrix.rb', line 46

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



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

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



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

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

#weightObject



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

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