Module: SemanticCache::Similarity

Defined in:
lib/semantic_cache/similarity.rb

Class Method Summary collapse

Class Method Details

.cosine(vec_a, vec_b) ⇒ Object

Compute cosine similarity between two vectors. Returns a Float between -1.0 and 1.0.

Raises:

  • (ArgumentError)


9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/semantic_cache/similarity.rb', line 9

def cosine(vec_a, vec_b)
  return 0.0 if vec_a.empty? || vec_b.empty?
  raise ArgumentError, "Vectors must be the same length" unless vec_a.length == vec_b.length

  dot_product = 0.0
  magnitude_a = 0.0
  magnitude_b = 0.0

  vec_a.length.times do |i|
    a = vec_a[i]
    b = vec_b[i]
    dot_product += a * b
    magnitude_a += a * a
    magnitude_b += b * b
  end

  denominator = Math.sqrt(magnitude_a) * Math.sqrt(magnitude_b)
  return 0.0 if denominator.zero?

  dot_product / denominator
end