サークルのLT(ライトニングトーク)にてTwitter解析して気分にあわせた音楽を教えてあげるとかいうわくわく心をくすぐるものを紹介されたので、ちょっと調べてやってみることに。
形態素解析とは言語処理の一種です。
例えば、「私は将来プログラマを目指しています。」とかがあったとすると、「私」「は」「将来」「プログラマ」「を」「目指し」「て」「い」「ます」みたいに意味のある最小単位に分解して解析することです。
・準備
MeCab: Yet Another Part-of-Speech and Morphological Analyzer
osdn.jp
こっからmecabを落としてくる。
qiita.com
これがだいぶ参考になった。
ruby使うので、なかったら
qiita.com
これにしたかってrubyをインストール。
で、rubyでmecabを使うために、mecab-rubyをインストール
d.hatena.ne.jp
・さぁやってみよう
まずは、ターミナルからmecabを使ってみる。
mecabって打ってから先程の例「私は将来プログラマを目指しています」とうつと・・・。
gyazo.com
ほえええ!!簡単になんかすごいっぽいことできた!!!
では次はrubyからいじってみよう!
require 'MeCab' mecab = MeCab::Tagger.new sentence = "ひよっこプログラマです。周りにプログラミングすごい人多いです。良いプログラマ目指してがんばります。" puts mecab.parse(sentence) node = mecab.parseToNode(sentence) word_array = [] begin node = node.next if /^名詞/ =~ node.feature.force_encoding("UTF-8") word_array << node.surface.force_encoding("UTF-8") end end until node.next.feature.include?("BOS/EOS") word_hash = {} word_array.each do |key| word_hash[key] ||=0 word_hash[key] += 1 end array = word_hash.sort_by{|key,val| val}.reverse puts array
とまぁこんな感じ。
require 'MeCab' mecab = MeCab::Tagger.new sentence = "ひよっこプログラマです。周りにプログラミングすごい人多いです。良いプログラマ目指してがんばります。" puts mecab.parse(sentence)
この部分は、はじめにMeCab使うよーって明示しておいて、その下でインスタンスの生成。
mecab.parse(sentence)ってので、sentenceの内容を形態素解析出来るので、その結果をputsで表示し明日。
if /^名詞/ =~ node.feature.force_encoding("UTF-8") word_array << node.surface.force_encoding("UTF-8")
ここの部分で、名詞だけを取ってきています。解析するときは接続詞だけがやたら出てきたりするのですが文の意味に大きな影響を与えるのは名詞なので、rubyの正規表現を使って当てはまる物だけを配列に格納しています。
word_hash = {} word_array.each do |key| word_hash[key] ||=0 word_hash[key] += 1 end array = word_hash.sort_by{|key,val| val}.reverse puts array
で、この部分で何回その単語が出てくるのかを記録して、配列に出現回数が多い順に並び替えて格納します。
その配列を表示してやれば・・・。名詞が出現回数順に表示されます。
という感じにうまいこと文中の頻出単語がとれています。
解析ができると幅が広がる!楽しい。