ダイヤユウ

ダイヤ ユウ

主にプログラミング。

mecabで形態素解析をする

ちょっと文字列をとってきてキーワードを抽出しようと思ったところ、形態素解析ということをしないといけなそうなので簡単にやります。

形態素解析とは

形態素解析(けいたいそかいせき、Morphological Analysis)とは、文法的な情報の注記の無い自然言語のテキストデータ(文)から、対象言語の文法や、辞書と呼ばれる単語の品詞等の情報にもとづき、形態素(Morpheme, おおまかにいえば、言語で意味を持つ最小単位)の列に分割し、それぞれの形態素の品詞等を判別する作業である。

例)

文字列    読み  原形  品詞の種類 活用の種類 活用形
お待ち   オマチ   お待ち   名詞-サ変接続      
し シ する  動詞-自立   サ変・スル 連用形
て テ て 助詞-接続助詞      
おり  オリ  おる  動詞-非自立    五段・ラ行 連用形
ます  マス  ます  助動詞   特殊・マス 基本形
。 。 。 記号-句点        

形態素解析 - Wikipedia

文章を単語ごとに分けるようなことですね。

どう形態素解析するか

blog.scimpr.com

この記事のような感じにすればいけそうなので、この方法でやってみます。

brewで入れる

$ brew install mecab-ipadic

mecab gemを入れる

$ gem install mecab
require 'natto'

txt = 'すもももももももものうち'

natto = Natto::MeCab.new
natto.parse(txt) do |n|
  puts "#{n.surface}: #{n.feature}"
end

ファイル実行してもエラーが起きる。

Could not open library '/usr/lib/libmecab.so.2': dlopen(/usr/lib/libmecab.so.2, 5)

/usr/lib観ても確かにそんなファイルない。

うーーむ。調べて見るとMECABパスを設定しないといけないとかなんとか。 MECABがどこにあるのかを確認してパスを設定する。

$ which mecab
#=>/usr/local/bin/mecab


$ export MECAB_PATH=/usr/local/bin/mecab

再度rubyのファイルを実行。 すると、以下のように実行が確認できた。

すもも: 名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も: 助詞,係助詞,*,*,*,*,も,モ,モ
もも: 名詞,一般,*,*,*,*,もも,モモ,モモ
も: 助詞,係助詞,*,*,*,*,も,モ,モ
もも: 名詞,一般,*,*,*,*,もも,モモ,モモ
の: 助詞,連体化,*,*,*,*,の,ノ,ノ
うち: 名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ

名詞だけとりたい

この中から名詞だけとりたい。

GitHub - buruzaemon/natto: A Tasty Ruby Binding with MeCab

githubのreadme見ても品詞のみを取り出すような記述はないっぽい。コードの中身頑張って探せばそれっぽいのはあるかもしれん。 とりあえず力技でやります。

require 'natto'

txt = 'すもももももももものうち'

natto = Natto::MeCab.new
natto.parse(txt) do |n|
   if n.feature.split(",").first == "名詞"
     puts "#{n.surface}"
   end
end

分割された文字列が名詞の場合にのみ出力します。