RubyでN-gramを計算するメソッド
RubyでN-gramを計算するメソッドを作ったよーって言うメモです。
class String def ngram n characters = self.split(//u) return [self] if characters.size <= n return 0.upto(characters.size-n).collect do |i| characters[i, n].join end end end p "おぎやはぎですけど何か問題でも?".ngram(2) # => ["おぎ", "ぎや", "やは", "はぎ", "ぎで", "です", "すけ", "けど", "ど何", "何か", "か問", "問題", "題で", "でも", "も?"]
※ 2012-02-11 12:14 追記 ちょっと改良しました
- characters[i..(i+n-1)].join
+ characters[i, n].join
※ 2012-02-11 12:45 コメントでeach_consメソッドを教えてもらいました
class String def ngram n characters = self.split(//u) return [self] if characters.size <= n return characters.each_cons(n).collect(&:join) end end