# File lib/activerdf_rdflite/suggesting.rb, line 28
28:         def suggest(resource)
29:                 $activerdflog.debug "starting suggestions for #{size} triples"
30:                 time = Time.now
31: 
32:     predicates = []
33:                 own_predicates = resource.direct_predicates
34: 
35:                 construct_occurrence_matrix
36:                 construct_cooccurrence_matrix
37: 
38:                 own_predicates.each do |p|
39:                         predicates << p if occurrence(p) > 1
40:                 end
41: 
42:                 # fetch all predicates co-occurring with our predicates
43:                 candidates = predicates.collect {|p| cooccurring(p) }
44:                 return nil if candidates.empty?
45: 
46:                 # perform set intersection
47:                 candidates = candidates.inject {|intersect, n| intersect & n }.flatten
48:                 candidates = candidates - own_predicates
49: 
50:                 suggestions = candidates.collect do |candidate|
51:                         score = predicates.inject(1.0) do |score, p|
52:                                 score * cooccurrence(candidate, p) / occurrence(p)
53:                         end
54:                         [candidate, score]
55:                 end
56:                 $activerdflog.debug "suggestions for #{resource} took #{Time.now-time}s"
57:                 suggestions
58:         end