SimStringをRubyから使ってみた
SimStringは,類似文字列検索のための高速かつシンプルなライブラリです。
簡単にいえば「もしかして:〇〇」を簡単に実装できるライブラリですね。
詳しくは公式サイトを見てください。http://www.chokkan.org/software/simstring/
このライブラリはC++でできているのですが、公式サイトを見るとPythonとRubyからも扱えるとのこと。Pythonのサンプルが載っていて普段ならこれでなんの問題もないのですが、最近仕事でRubyをやっているのでRubyから使う方法が知りたくて調べました。
ビルド方法
基本的には公式サイトの手順で問題ないのですが、注意点が少し有ります。
- Ruby1.9系はインストール出来ない
- Macだとインストールはできるが、なんか動かない(っぽい)
CentOS5.5にruby1.8.7だとあっさりできました。
データ投入
一番簡単なのはsimstringコマンドを使ってテキストファイルからデータを入れる方法です。
スパゲッティー
スパゲッティ
スパゲッテー
スパゲティー
スパッティー
スパゲッティー
スパゲッティーニ
スパゲッティー・
スパッゲッティー
スパゲッティーニ・
・・スパゲッティー
スープスパゲッティー
スパゲッティーモンスター
上記のようなテキストをtest_data.txtとして保存します。
次にsimstringコマンドを使ってデータを入れます。
$ simstring -bu -d test.db < test_data.txt
Rubyで操作する
データが投入できたので、次はRubyから使ってみます。
http://www.chokkan.org/software/simstring/swig/
まぁこれを見ればすぐわかるんですが一応説明。
データ投入
require 'simstring' #DB作成 db = Simstring::Writer.new('test_ruby.db', 3, false, true) #DB投入 db.insert('スパゲティ') db.close()
DBオブジェクトを作成して、insertするだけ。簡単
検索
require 'simstring' # DBオープン db = Simstring::Reader.new('test.db') # 類似度関数としてコサイン類似度を選択。係数をセット db.measure = Simstring::Cosine db.threshold = 0.7 #出力 p(db.retrieve('スパゲッテ'))
DBをオープンして、類似度関数とパラメータをセットして検索するだけです。超簡単
まとめ
簡単に使えてしかも速い。単語数が結構増えても速いと聞きました。
検索補助や入力補助なんかに使えそうなので、SimStringを使うことでユーザーにとって地味に便利な機能をサイトに追加することができそうな気がしてきました。おすすめです。