Module: SmartCsvImport::CosineSimilarity

Defined in:
lib/smart_csv_import/cosine_similarity.rb

Class Method Summary collapse

Class Method Details

.call(vec_a, vec_b) ⇒ Object



5
6
7
8
9
10
11
12
13
# File 'lib/smart_csv_import/cosine_similarity.rb', line 5

def self.call(vec_a, vec_b)
  dot_product = vec_a.zip(vec_b).sum { |a, b| a * b }
  magnitude_a = Math.sqrt(vec_a.sum { |v| v**2 })
  magnitude_b = Math.sqrt(vec_b.sum { |v| v**2 })

  return 0.0 if magnitude_a.zero? || magnitude_b.zero?

  dot_product / (magnitude_a * magnitude_b)
end