Class: Predictor::InputMatrix
- Inherits:
-
Object
- Object
- Predictor::InputMatrix
- Defined in:
- lib/predictor/input_matrix.rb
Instance Method Summary collapse
- #add_set(set, items) ⇒ Object
- #add_single(set, item) ⇒ Object
- #add_to_set(set, *items) ⇒ Object
- #calculate_jaccard(item1, item2) ⇒ Object
-
#delete_item(item) ⇒ Object
delete item from the matrix.
-
#initialize(opts) ⇒ InputMatrix
constructor
A new instance of InputMatrix.
- #items_for(set) ⇒ Object
- #parent_redis_key(*append) ⇒ Object
- #redis_key(*append) ⇒ Object
- #related_items(item) ⇒ Object
- #score(item1, item2) ⇒ Object
- #sets_for(item) ⇒ Object
- #weight ⇒ Object
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 |
#related_items(item) ⇒ Object
42 43 44 45 46 |
# File 'lib/predictor/input_matrix.rb', line 42 def (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 |
#weight ⇒ Object
15 16 17 |
# File 'lib/predictor/input_matrix.rb', line 15 def weight (@opts[:weight] || 1).to_f end |