Mecab（形態素解析）で遊んでみた！

# はじめに

MeCabを使う場面が出てきたので備忘録として投稿

MeCabのインストール方法から出力までをまとめてみた

お品書きは下記の通り

* MeCab（形態素解析）とは
* MeCabのインストール方法
* 実際に動かしてみた
* 出力フォーマットについて
* おわりに

# MeCab（形態素解析）とは

### MeCab
[MeCab][1]とは、京都大学情報学研究科によって開発されたオープンソース形態素解析エンジンのこと
perl, ruby, python, java, C# で使用できる

### 形態素解析
対象となる言語の文法や単語の品詞情報をもとに、文章を形態素に分解する解析
自然言語処理分野で事前処理として用いられる手法
※**形態素** … 意味をもつ表現要素の最小単位

例えば
「私はpythonを使用して、プログラミングを勉強しています。」
と入力すると、以下のように出力される

|単語|品詞|品詞細分類||単語|品詞|品詞細分類|
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|私|名詞|代名詞||プログラミング|名詞|サ変接続|
|は|助詞|係助詞||を|助詞|格助詞|
|python|名詞|一般||勉強|名詞|サ変接続|
|を|助詞|格助詞||し|動詞|自立|
|使用|名詞|サ変接続||て|助詞|接続助詞|
|し|動詞|自立||い|動詞|非自立|
|て|助詞|接続助詞||ます|助動詞|-|
|、|記号|読点||。|記号|句点|

# MeCabのインストール方法
１ [こちら][2]から、mecab-64-0.996.2.exe をインストール


２ mecab-64-0.996.2.exe を実行し、**UTF-8**でMeCabをインストール

![セットアップ1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435504/9a0f160d-cbb3-f52f-68ac-3368d84aea7b.png)
![セットアップ2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435504/5b7dc27f-3996-d503-8ac5-eeadc7867678.png)

インストールが完了すると「辞書を作成します」と出てくるのでそのまま実行


３ MeCab がきちんと使えるようになっているか CMD で確認

![mecab.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435504/a1cfe047-06d2-c7bb-f058-b0f4d7af2230.png)

※文字化けの原因は、 CMD で UTF-8 対応していないからとのこと…
　なんかできてそうって思えばOK！
※ EOS は End of Sentence (文末) の略

CMD で MeCab が反応しないときはパスが通っていないのかも？
環境変数の Path にインストールした \Mecab\bin を追加してあげてください。

![環境変数.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435504/5ef1f38f-3e0f-c1cc-93eb-304ab36c535c.png)

４ python で使えるように python 用 mecab をインストールする

```
pip install mecab-python-windows
```

![スタート.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435504/5d6df924-a2d6-3142-45cb-c6fc4bf6ac32.png)

５ Mecab フォルダにある libmecab.dll を python フォルダに上書き保存する

フォルダの場所は以下の通り

```
(コピーするファイル名)：libmecab.dll
(コピー元)：C:\Program Files\MeCab\bin
(コピー先)：C:\Users\(USER名)\AppData\Local\Programs\Python\Python37\Lib\site-packages

cmd で検索すれば似たようなところが出るはず
(コピー元)：where mecab
(コピー先)：where python
```

# 実際に動かしてみた
MeCabでの形態素解析は以下のように、

1. MeCab.Tagger()で形態素解析をするための辞書を指定
2. tagger.parseで、指定した辞書を使用して、文字列やテキストファイルを形態素解析する

と、いたってシンプル

実際に文字列やテキストファイルから形態素解析を行なう簡単なプログラムを作成してみた

### プログラム

* 文字列

```python:mecab_string.py
import MeCab

CONTENT = "私はpythonを使用して、プログラミングを勉強しています。"

tagger = MeCab.Tagger()
parse = tagger.parse(CONTENT)

print(parse)
```

* テキストファイル

ファイルを開くとき、エンコードを指定しないと以下のエラーが出るので忘れずに！

> UnicodeDecodeError: 'cp932' codec can't decode byte 0x81 in position 4:
  illegal multibyte sequence

```text:sample.txt
私はpythonを使用して、プログラミングを勉強しています。
```

```python:mecab_read.py
import MeCab

FILE_NAME = "sample.txt"

with open(FILE_NAME, "r", encoding="utf-8") as f:
    CONTENT = f.read()

tagger = MeCab.Tagger()
parse = tagger.parse(CONTENT)

print(parse)
```

### 出力結果

```
私      名詞,代名詞,一般,*,*,*,私,ワタシ,ワタシ
は      助詞,係助詞,*,*,*,*,は,ハ,ワ
python  名詞,一般,*,*,*,*,*
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
使用    名詞,サ変接続,*,*,*,*,使用,シヨウ,シヨー
し      動詞,自立,*,*,サ変・スル,連用形,する,シ,シ
て      助詞,接続助詞,*,*,*,*,て,テ,テ
、      記号,読点,*,*,*,*,、,、,、
プログラミング  名詞,サ変接続,*,*,*,*,プログラミング,プログラミング,プログラミング
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
勉強    名詞,サ変接続,*,*,*,*,勉強,ベンキョウ,ベンキョー
し      動詞,自立,*,*,サ変・スル,連用形,する,シ,シ
て      助詞,接続助詞,*,*,*,*,て,テ,テ
い      動詞,非自立,*,*,一段,連用形,いる,イ,イ
ます    助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス
。      記号,句点,*,*,*,*,。,。,。
EOS
```

おー、ちゃんと出力できた！

# 出力フォーマットについて
先ほど、MeCab.Tagger() は「形態素解析の辞書を指定する場所」と書いた

ということは、辞書も複数あるので何個か紹介しようと思う

新たにインストールするものはないので、上記のプログラムとかを変えて試してみると面白いかも

入力はすべて **形態素解析** にしてみた

### MeCab.Tagger()
MeCab互換の形態素解析
デフォルトに設定されている

```
形態素  名詞,一般,*,*,*,*,形態素,ケイタイソ,ケイタイソ
解析    名詞,サ変接続,*,*,*,*,解析,カイセキ,カイセキ
EOS
```

### MeCab.Tagger("-Ochasen")
ChaSen互換の形態素解析

```
形態素  ケイタイソ      形態素  名詞-一般
解析    カイセキ        解析    名詞-サ変接続
EOS
```

### MeCab.Tagger("-Owakati")
形態素解析したものをを分かち書き
英語のように単語ごとに区切りを入れる

```
形態素 解析
```

### MeCab.Tagger("-Oyomi")
形態素解析したものの読み方
カタカナと英単語で出力する

```
ケイタイソカイセキ
```

### MeCab.Tagger("-Odump")
全情報を出力する形態素解析

```
0 BOS BOS/EOS,*,*,*,*,*,*,*,* 0 0 0 0 0 0 2 1 0.000000 0.000000 0.000000 0
7 形態素 名詞,一般,*,*,*,*,形態素,ケイタイソ,ケイタイソ 0 9 1285 1285 38 2 0 1 0.000000 0.000000 0.000000 5338
13 解析 名詞,サ変接続,*,*,*,*,解析,カイセキ,カイセキ 9 15 1283 1283 36 2 0 1 0.000000 0.000000 0.000000 9241
20 EOS BOS/EOS,*,*,*,*,*,*,*,* 15 15 0 0 0 0 3 1 0.000000 0.000000 0.000000 8505
```

※ BOS は Beginning of a Sentence (文頭) の略

### MeCab.Tagger("-Osimple")
シンプルな形態素解析

```
形態素  名詞-一般
解析    名詞-サ変接続
EOS
```

まだまだたくさんあるので、興味がある方は[公式][1]などをあさってみてください！

# おわりに
MeCab を使って形態素解析ができるようになった
AIでの自然言語処理でも使うとのことなので使い方をマスターしていきたいところ…( ˘ω˘ )

[1]:https://taku910.github.io/mecab/
[2]:https://github.com/ikegami-yukino/mecab/releases