Module: RubyTestStudentGrader::Similarity
- Defined in:
- lib/ruby_test_student_grader/similarity.rb
Class Method Summary collapse
-
.jaccard(text_a, text_b, k: 5) ⇒ Object
Calcula similitud de Jaccard sobre shingles de tokens simples.
- .shingles(tokens, k) ⇒ Object
- .tokenize(text) ⇒ Object
Class Method Details
.jaccard(text_a, text_b, k: 5) ⇒ Object
Calcula similitud de Jaccard sobre shingles de tokens simples. text_a, text_b: String k: tamaño de shingle (por defecto 5 tokens)
10 11 12 13 14 15 16 17 18 |
# File 'lib/ruby_test_student_grader/similarity.rb', line 10 def jaccard(text_a, text_b, k: 5) a = shingles(tokenize(text_a.to_s), k) b = shingles(tokenize(text_b.to_s), k) return 1.0 if a.empty? && b.empty? inter = (a & b).size.to_f union = (a | b).size.to_f return 0.0 if union.zero? (inter / union).round(4) end |
.shingles(tokens, k) ⇒ Object
24 25 26 27 |
# File 'lib/ruby_test_student_grader/similarity.rb', line 24 def shingles(tokens, k) return [] if tokens.size < k (0..tokens.size - k).map { |i| tokens[i, k].join(" ") }.uniq end |
.tokenize(text) ⇒ Object
20 21 22 |
# File 'lib/ruby_test_student_grader/similarity.rb', line 20 def tokenize(text) text.downcase.gsub(/[^a-z0-9_]+/, " ").split end |