fuzzy-string-match 0.9.0 リリース
二つの文字列同士を曖昧比較するライブラリ(gem)をリリースしました。
lucene-3.0.2からJaro-Winkler distance アルゴリズムだけをポーティングしたものです。
キーワード検索でユーザーのタイプミスをある程度許容したい時なんかに使えると思います。
ちなみに、私は[Sekka]という日本語入力メソッドで使っています。
結果は上々で、ローマ字にタイプミスが混在してもそれなりに合っていれば漢字を探しだしてくれるので重宝しています。
限界速度ぎりぎりまで打鍵スピードを上げてもそれなりに漢字変換ができてしまうので非常に効果を感じています。
インストール方法
これだけです。
gem install fuzzy-string-match
依存ライブラリ群も自動的に解決されてインストールされます。
使いかた
factoryメソッドでインスタンスを作って、getDistance()メソッドに比較したい2つの文字列を渡すだけです。 結果が 0 ≦ x ≦ 1.0 の近似度で返ってきます。(1.0で完全一致です)
require 'fuzzystringmatch'
jarow = FuzzyStringMatch::JaroWinkler.new.create( :native )
p jarow.getDistance( "jones", "johnson" )
ソースコード
githubにあります。 kiyoka’s fuzzy-string-match at master - GitHub Jaro-Winkler以外のアルゴリズムが欲しい人はこのモジュールに追加して頂ければ幸いです。 作業はluceneのオリジナルJavaソースを慎重にRubyとC言語に変換するという簡単なお仕事です(笑)
Rubyの汎用的なライブラリをリリースしたのは今回が初めてです。([Nendo]は汎用的だけどちょっと毛色が違うからね) 微力ながらRubyコミュニティーに貢献できた気がして嬉しいです。