Class: Recommendation::Engine

Inherits:
Object
  • Object
show all
Defined in:
lib/recommendation/engine.rb

Instance Method Summary collapse

Instance Method Details

#recommendation(table, user, similarity = :sim_pearson) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/recommendation/engine.rb', line 6

def recommendation(table, user, similarity=:sim_pearson)
  totals_h = Hash.new(0)
  sim_sums_h = Hash.new(0)
  table.each do |other, val|
    next if other == user
    sim = __send__(similarity, table, user, other)
    next if sim <= 0
    table[other].each do |item, val|
      if !table[user].keys.include?(item) || table[user][item] == 0
        totals_h[item] += table[other][item]*sim
        sim_sums_h[item] += sim
      end
    end
  end

  rankings = Hash.new
  totals_h.each do |item, total|
    rankings[item] = total/sim_sums_h[item]
  end

  rankings.sort_by{|k, v| -v}
end

#top_matches(table, user, n = 5, similarity = :sim_pearson) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/recommendation/engine.rb', line 29

def top_matches(table, user, n=5, similarity=:sim_pearson)
  scores = Array.new
  table.each do |key, value|
    if key != user
      scores << [__send__(similarity, table, user,key), key]
    end
  end

  result = Array.new
  scores.sort.reverse[0,n].each do |k, v|
    result << [v, k]
  end
  result
end