Module: Legion::Extensions::Apollo::Helpers::Similarity

Defined in:
lib/legion/extensions/apollo/helpers/similarity.rb

Class Method Summary collapse

Class Method Details

.above_corroboration_threshold?(similarity:) ⇒ Boolean

Returns:

  • (Boolean)


21
22
23
# File 'lib/legion/extensions/apollo/helpers/similarity.rb', line 21

def above_corroboration_threshold?(similarity:, **)
  similarity >= Confidence::CORROBORATION_SIMILARITY_THRESHOLD
end

.classify_match(similarity:, same_content_type: true, contradicts: false) ⇒ Object



25
26
27
28
29
30
31
# File 'lib/legion/extensions/apollo/helpers/similarity.rb', line 25

def classify_match(similarity:, same_content_type: true, contradicts: false, **)
  if above_corroboration_threshold?(similarity: similarity) && same_content_type
    contradicts ? :contradiction : :corroboration
  else
    :novel
  end
end

.cosine_similarity(vec_a:, vec_b:) ⇒ Object



12
13
14
15
16
17
18
19
# File 'lib/legion/extensions/apollo/helpers/similarity.rb', line 12

def cosine_similarity(vec_a:, vec_b:, **)
  dot = vec_a.zip(vec_b).sum { |x, y| x * y }
  mag_a = Math.sqrt(vec_a.sum { |x| x**2 })
  mag_b = Math.sqrt(vec_b.sum { |x| x**2 })
  return 0.0 if mag_a.zero? || mag_b.zero?

  dot / (mag_a * mag_b)
end