編集距離

レーベンシュタイン距離または編集距離で検索をするとそのものズバリなWe retire raa.ruby-lang.orgが見つかる.

使い方は簡単:

require 'text'
p Text::Levenshtein.distance( 'hello', 'hollow')
#=> 2


2007-12-18 - 新言語 Xtalを作る日記から,丁稚な日々のゴルフサポート(goruby?)みたいにしたらどうか?と思って改造.

候補選択がバカすぎる.lengthの代わりにlenって打ったら,gemを呼び出すという恐ろしいことになった.打ち間違えても適当に補完して正しいメソッドを呼び出すというより,意図的に間違わない限り正しいメソッドを呼び出さない.

自分の足を撃ち抜きたい人向け.

require 'text/levenshtein'

class Object
  def get_candidate( x, ys)
    return x if ys.index(x)
    ys.sort_by{|y| Text::Levenshtein.distance( x, y) }[0]
  end

  def method_missing m, *a, &b
    t = get_candidate(m.to_s, public_methods + private_methods)
    puts "[Did you mean: #{t}]"
    t ? __send__(t, *a, &b) : super
  end
end

a = %w[abc def hij klm]
put a.siz

#=>[Did you mean: size]
#=>[Did you mean: puts]
#=>4


追記:すでにやってる人がいたんですね→Matzにっき(2007-07-23)