全文検索とは、複数の文書ファイルから特定のキーワードを検索する技術です。そのキーワードを抽出するにはN-gramを使います。N-gramとは、検索対象を単語単位ではなく文字単位で分解し、後続のN-1文字を含めた状態で出現頻度を求める方法の事です。

以下、N-gramの説明をWikipediaから引用しました。

「N文字インデックス法」「Nグラム法」などともいう。検索対象を単語単位ではなく文字単位で分解し、後続の N-1 文字を含めた状態で出現頻度を求める方法。Nの値が1なら「ユニグラム(英: uni-gram)」、2なら「バイグラム(英: bi-gram)」、3なら「トライグラム(英: tri-gram)」と呼ばれる。たとえば「全文検索技術」という文字列の場合、「全文」「文検」「検索」「索技」「技術」「術(終端)」と2文字ずつ分割して索引化を行ってやれば、検索漏れが生じず、辞書の必要も無い。

出典:Wikipedia

実際にN-gramがどんなものかというと、例えばキーワードが「abc」の場合は以下のようになります。

N-1 : a, b, c
N-2 : ab, bc
N-3 : abc

今回はこのN-gramをRubyで作成します。

Rubyのコード

以下のコードでは「Ruby」というキーワードをN-gramの対象として使います。以下のようにeach_consメソッドを使うことでN-gramが実現出来ます。each_consメソッドは「n個の連続した要素を1つずつずらしながら繰り返す」という役割を持っています。

target = "Ruby"
ngram = []

for i in 1..target.length do
    ngram[i] = target.each_char.each_cons(i).map{|chars| chars.join }
end

p ngram.compact.join(",")

 
出力結果は以下のとおりです。

"R,u,b,y,Ru,ub,by,Rub,uby,Ruby"

 
これで全文検索を行うためのデータを簡単に用意することが出来ます。以上です。

参考

each_cons (Enumerable) - Rubyリファレンス - AmiWiki
RubyのEnumerable#each_consを使ってN-gramを簡単に作る