Class: Hash

Inherits:
Object
  • Object
show all
Defined in:
lib/ncpp/utils.rb

Direct Known Subclasses

NCPP::CommandRegistry

Constant Summary collapse

KEY_SUGGEST_THRESH =

if more than 70% certain, suggest key

0.7
KEY_SUGGEST_JARO_WEIGHT =

70% Jaro-Winkler

0.7
KEY_SUGGEST_LEVENSHTEIN_WEIGHT =

30% Levenshtein

0.3

Instance Method Summary collapse

Instance Method Details

#suggest_similar_key(key_name) ⇒ Object



571
572
573
574
575
576
577
578
579
580
581
582
583
584
# File 'lib/ncpp/utils.rb', line 571

def suggest_similar_key(key_name)
  key_name = key_name.to_s.downcase
  scores = self.map do |k, _|
    jw = DidYouMean::JaroWinkler.distance(key_name, k.to_s)
    lev = 1.0 - [DidYouMean::Levenshtein.distance(key_name, k.to_s) / [key_name.length].max.to_f, 1.0].min
    jw * KEY_SUGGEST_JARO_WEIGHT + lev * KEY_SUGGEST_LEVENSHTEIN_WEIGHT
  end
  max_score = scores.max
  if max_score < KEY_SUGGEST_THRESH
    nil
  else
    self.keys[scores.index(max_score)].to_s
  end
end