読者です 読者をやめる 読者になる 読者になる

MeCabとnattoで形態素解析

プログラミング

スポンサーリンク


サークルの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 

で、この部分で何回その単語が出てくるのかを記録して、配列に出現回数が多い順に並び替えて格納します。
その配列を表示してやれば・・・。名詞が出現回数順に表示されます。

gyazo.com

という感じにうまいこと文中の頻出単語がとれています。
解析ができると幅が広がる!楽しい。

にほんブログ村 大学生日記ブログ 理系大学生へ
にほんブログ村

© 2016 Yuki Sako.