Class: DidYouMean::SpellChecker
- Inherits:
-
Object
- Object
- DidYouMean::SpellChecker
- Defined in:
- lib/did_you_mean/spell_checker.rb
Instance Method Summary collapse
- #correct(input) ⇒ Object
-
#initialize(dictionary:) ⇒ SpellChecker
constructor
A new instance of SpellChecker.
Constructor Details
#initialize(dictionary:) ⇒ SpellChecker
Returns a new instance of SpellChecker.
8 9 10 |
# File 'lib/did_you_mean/spell_checker.rb', line 8 def initialize(dictionary:) @dictionary = dictionary end |
Instance Method Details
#correct(input) ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/did_you_mean/spell_checker.rb', line 12 def correct(input) normalized_input = normalize(input) threshold = normalized_input.length > 3 ? 0.834 : 0.77 words = @dictionary.select { |word| JaroWinkler.distance(normalize(word), normalized_input) >= threshold } words.reject! { |word| input.to_s == word.to_s } words.sort_by! { |word| JaroWinkler.distance(word.to_s, normalized_input) } words.reverse! # Correct mistypes threshold = (normalized_input.length * 0.25).ceil corrections = words.select { |c| Levenshtein.distance(normalize(c), normalized_input) <= threshold } # Correct misspells if corrections.empty? corrections = words.select do |word| word = normalize(word) length = normalized_input.length < word.length ? normalized_input.length : word.length Levenshtein.distance(word, normalized_input) < length end.first(1) end corrections end |