Class: DidYouMean::TreeSpellChecker
- Inherits:
 - 
      Object
      
        
- Object
 - DidYouMean::TreeSpellChecker
 
 
- Defined in:
 - lib/did_you_mean/tree_spell_checker.rb
 
Overview
spell checker for a dictionary that has a tree structure, see doc/tree_spell_checker_api.md
Instance Attribute Summary collapse
- 
  
    
      #augment  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    
Returns the value of attribute augment.
 - 
  
    
      #dictionary  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    
Returns the value of attribute dictionary.
 - 
  
    
      #separator  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    
Returns the value of attribute separator.
 
Instance Method Summary collapse
- #correct(input) ⇒ Object
 - #dictionary_without_leaves ⇒ Object
 - #dimensions ⇒ Object
 - #find_leaves(path) ⇒ Object
 - 
  
    
      #initialize(dictionary:, separator: '/', augment: nil)  ⇒ TreeSpellChecker 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    
A new instance of TreeSpellChecker.
 - #plausible_dimensions(input) ⇒ Object
 - #possible_paths(states) ⇒ Object
 - #tree_depth ⇒ Object
 
Constructor Details
#initialize(dictionary:, separator: '/', augment: nil) ⇒ TreeSpellChecker
Returns a new instance of TreeSpellChecker.
      9 10 11 12 13  | 
    
      # File 'lib/did_you_mean/tree_spell_checker.rb', line 9 def initialize(dictionary:, separator: '/', augment: nil) @dictionary = dictionary @separator = separator @augment = augment end  | 
  
Instance Attribute Details
#augment ⇒ Object (readonly)
Returns the value of attribute augment.
      7 8 9  | 
    
      # File 'lib/did_you_mean/tree_spell_checker.rb', line 7 def augment @augment end  | 
  
#dictionary ⇒ Object (readonly)
Returns the value of attribute dictionary.
      7 8 9  | 
    
      # File 'lib/did_you_mean/tree_spell_checker.rb', line 7 def dictionary @dictionary end  | 
  
#separator ⇒ Object (readonly)
Returns the value of attribute separator.
      7 8 9  | 
    
      # File 'lib/did_you_mean/tree_spell_checker.rb', line 7 def separator @separator end  | 
  
Instance Method Details
#correct(input) ⇒ Object
      15 16 17 18 19 20 21 22 23  | 
    
      # File 'lib/did_you_mean/tree_spell_checker.rb', line 15 def correct(input) plausibles = plausible_dimensions(input) return fall_back_to_normal_spell_check(input) if plausibles.empty? suggestions = find_suggestions(input, plausibles) return fall_back_to_normal_spell_check(input) if suggestions.empty? suggestions end  | 
  
#dictionary_without_leaves ⇒ Object
      25 26 27  | 
    
      # File 'lib/did_you_mean/tree_spell_checker.rb', line 25 def dictionary_without_leaves @dictionary_without_leaves ||= dictionary.map { |word| word.split(separator)[0..-2] }.uniq end  | 
  
#dimensions ⇒ Object
      33 34 35 36 37  | 
    
      # File 'lib/did_you_mean/tree_spell_checker.rb', line 33 def dimensions @dimensions ||= tree_depth.times.map do |index| dictionary_without_leaves.map { |element| element[index] }.compact.uniq end end  | 
  
#find_leaves(path) ⇒ Object
      39 40 41 42 43 44 45  | 
    
      # File 'lib/did_you_mean/tree_spell_checker.rb', line 39 def find_leaves(path) path_with_separator = "#{path}#{separator}" dictionary .select {|str| str.include?(path_with_separator) } .map {|str| str.gsub(path_with_separator, '') } end  | 
  
#plausible_dimensions(input) ⇒ Object
      47 48 49 50 51 52  | 
    
      # File 'lib/did_you_mean/tree_spell_checker.rb', line 47 def plausible_dimensions(input) input.split(separator)[0..-2] .map .with_index { |element, index| correct_element(dimensions[index], element) if dimensions[index] } .compact end  | 
  
#possible_paths(states) ⇒ Object
      54 55 56  | 
    
      # File 'lib/did_you_mean/tree_spell_checker.rb', line 54 def possible_paths(states) states.map { |state| state.join(separator) } end  | 
  
#tree_depth ⇒ Object
      29 30 31  | 
    
      # File 'lib/did_you_mean/tree_spell_checker.rb', line 29 def tree_depth @tree_depth ||= dictionary_without_leaves.max { |a, b| a.size <=> b.size }.size end  |