class DivergenceMeter::DidYouMean
did you mean?
Public Class Methods
new(target, words)
click to toggle source
initialize @param [String] target base word @param [Array] words check words
# File lib/divergence_meter/did_you_mean.rb, line 9 def initialize(target, words) @target = target @words = Array(words) end
Public Instance Methods
run()
click to toggle source
calculate did you mean? @return [String] word
# File lib/divergence_meter/did_you_mean.rb, line 16 def run target_size = @target.size @words.map do |word| { word: word, distance: LevenshteinDistance.run(@target, word) } end.sort do |a, b| sort_distance(a, b, target_size) end.first[:word] end
Private Instance Methods
sort_distance(a, b, target_size)
click to toggle source
sort by distance @param [Hash] a sort object a @param [Hash] b sort object b @param [Fixnum] target_size target word string size @return [Fixnum] sort point
# File lib/divergence_meter/did_you_mean.rb, line 33 def sort_distance(a, b, target_size) a_distance = a[:distance] b_distance = b[:distance] if a_distance == b_distance (target_size - a[:word].size).abs <=> (target_size - b[:word].size).abs else a_distance <=> b_distance end end