MeCabで切った後の複合名詞に対して、部分文字列の組み合わせを考える

完全一致はしないけど、部分文字列で見ると専門用語があるという感じなので、分類したいデータは取りうる部分文字列の組み合わせの要素、ということになる。

def comb_of_substr(a)
  (1..a.length).map{|b|
    a.enum_cons(b).map{|c|
      c
    }
  }.inject([]) {|z, x| z + x }
end

comb_of_substr([1,2,3]) # => [[1], [2], [3], [1, 2], [2, 3], [1, 2, 3]]

こんな感じ。

irb(main):278:0> puts comb_of_substr(["グリコーゲン", "分枝", "酵素"])
グリコーゲン
分枝
酵素
グリコーゲン
分枝
分枝
酵素
グリコーゲン
分枝
酵素
=> nil