毎日テキストマイニング

180日間、毎日テキストマイニングをするブログです

2018/6/25【3日目】MeCabで形態素解析をする

昨日の時点で、Word-cloudの使い方がわかってきましたので、Word-cloudを使う条件である「半角で区切られた文字」を作成していきたいと思います。

MeCabに入門

実際のところ日本語は半角では区切れませんので、文を単語ごとに区切っていく形態素解析という解析をしていくようです。この形態素解析をするための解析エンジンとしてMeCabというものがあるらしいです。

MeCab http://taku910.github.io/mecab/

今日はこのMeCabの使い方を勉強していきます。しかし、半角で区切れないというのも、本当にコンピューターに適していない言語ですね。日本語は。

まず、インストール。

brew install mecab-ipadic

インストールできたか確認

$ mecab -v
mecab of 0.996

インストールできたら早速使ってみましょう。 mecabと入力して、解析したい文を打ち込みます。

$ mecab
青パジャマ赤パジャマ黄パジャマ、バスガス大爆発、東京特許許可局
青 接頭詞,名詞接続,*,*,*,*,青,アオ,アオ
パジャマ    名詞,一般,*,*,*,*,パジャマ,パジャマ,パジャマ
赤 名詞,一般,*,*,*,*,赤,アカ,アカ
パジャマ    名詞,一般,*,*,*,*,パジャマ,パジャマ,パジャマ
黄 名詞,一般,*,*,*,*,黄,キ,キ
パジャマ    名詞,一般,*,*,*,*,パジャマ,パジャマ,パジャマ
、 記号,読点,*,*,*,*,、,、,、
バス  名詞,一般,*,*,*,*,バス,バス,バス
ガス  名詞,一般,*,*,*,*,ガス,ガス,ガス
大 接頭詞,名詞接続,*,*,*,*,大,ダイ,ダイ
爆発  名詞,サ変接続,*,*,*,*,爆発,バクハツ,バクハツ
、 記号,読点,*,*,*,*,、,、,、
東京  名詞,固有名詞,地域,一般,*,*,東京,トウキョウ,トーキョー
特許  名詞,サ変接続,*,*,*,*,特許,トッキョ,トッキョ
許可  名詞,サ変接続,*,*,*,*,許可,キョカ,キョカ
局 名詞,接尾,一般,*,*,*,局,キョク,キョク

公式サイトによりますと1行が1文として解析されるようです。

MeCab では, 一行一文を前提として解析を行ないます。

しっかり解析できていますね。 それでは本日のAKBメンバーによる呟きを解析してみましょう。ちなみに今日の投稿数は42件でした。チーム4の村山彩希の誕生日だったようで、ちらほら話題として挙げられています。

とりあえずpip install でMeCabを入れます。

pip install mecab-python3
import sys
import MeCab

tagger = MeCab.Tagger ("-Owakati")

text = open('./text/today/20180625.txt', 'r')
# 改行をなくす
kaisekiyou = text.read().split('¥n')
mecab = tagger.parse(kaisekiyou)

with open("kaiseki.txt", "w", encoding='utf-8') as f:
     f.write(mecab)

しかし、これですと、エラーが起こりますね。

NotImplementedError: Wrong number or type of arguments for overloaded function 'Tagger_parse'.
  Possible C/C++ prototypes are:
    MeCab::Tagger::parse(MeCab::Model const &,MeCab::Lattice *)
    MeCab::Tagger::parse(MeCab::Lattice *) const
    MeCab::Tagger::parse(char const *)

どうやら渡しているのがリストのようですね。リストを文字列に変換するメソッドは.joinメソッドらしいです。.joinメソッドを無理やり追加して実行。

import sys
import MeCab

tagger = MeCab.Tagger ("-Owakati")

text = open('./text/today/20180625.txt', 'r')
# 改行をなくす
kaisekiyou = text.read().split('¥n')
string = ' '.join(kaisekiyou)
mecab = tagger.parse(string)


with open("kaiseki.txt", "w", encoding='utf-8') as f:
     f.write(mecab)

うまくいきました。

# 村山 チーム 4 # 手 を つなぎ ながら 公演 見 て て くれ た 方 ありがとう ござい まし た 🙇 ‍♀ ️🍎🍎 ! 今日 は ゆい り さん の 生誕 祭 でし た 🐬👻 ! チーム 4 で 良かっ た と 改めて 思い まし た し 、 ゆい り さん に これから も つい て いき ます ! ! 本当に お め で と … https :// t . co / oDjL 3 cDL

(以下略)

これを昨日のword-cloudに入れてみます。昨日のコードを実行。ドン。 f:id:rimt:20180626010332p:plain

思っていた画像と違いますね笑。httpsとcoしか読み込めていないようです。どうやら日本語フォントに対応していないようですね。

明日こそは、図を完成させたいと思います。

今日学んだこと

  • MeCabの基本的な使い方
  • Pyhonのjoinメソッドの使い方