MecabをPythonで使うまで

# Mecabとは
形態素解析エンジンです。
形態素解析については他の方の記事がすごくわかりやすいので割愛します。
なお、名前の由来は開発者が「和布蕪」好きだからだそうですﾊｲ
# mecabに必要なライブラリ
事前に必要なライブラリを入れておきましょう。mecabのサイトより抜粋しております。他に必要なライブラリがあればコメントしていただけると助かりますm(_ _)m
・ubuntu

```ubuntu.
sudo apt install mecab libmecab-dev mecab-ipadic-utf8 git make curl xz-utils file swig
```
*コメントよりswigも必要とのことでしたのでそちらも入れておきます。これがないとインストール時にエラーが出るようです。*



・Mac

```Mac.
brew install mecab mecab-ipadic git curl xz
```

# mecab導入
mecabのサイトはこちら  http://taku910.github.io/mecab/
サイト通りにも導入できますが、ubuntu、Mac共にコマンド一発でいけます。
・ubuntu

```ubuntu.
sudo apt-get install mecab libmecab-dev mecab-ipadic mecab-ipadic-utf8
```

・Mac

```Mac.
brew install mecab mecab-ipadic
```
### 導入確認
ターミナルで```mecab```と打って何か文章を入力するとこんな感じになります。
<img width="579" alt="mecabのデモ.png" src="https://qiita-image-store.s3.amazonaws.com/0/339669/b179a7ab-638e-ea91-354a-d1ab28187b32.png">
mecabなのに和布蕪が辞書にないのは悲しいなぁ。。。
## 追加辞書(mecab-ipadic-neologd)の導入
初期の辞書ではどうしても登録語が少ないので、思った通りに出力してくれません。（和布蕪とか最たる例）
この追加辞書がmecabの強みといってもいいんじゃないでしょうか。辞書の更新が、定期的（少なくとも２週間に１回以上）しているので常に新しい単語に対応しています。しかも中の人の仕事が早いです（体感

ということで追加辞書はgit上にあるのでクローンしてきましょう。
**辞書のアップデートがあるのでわかりやすい場所に置いておきましょう**

```
git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
```

クローンしたら、```mecab-ipadic-neologd```に入って以下のコマンドでインストールします。
**-aオプションで全ての追加辞書をインストールしますがある程度の空き容量が必要です。(1GB以上)**全部入れなくても良い場合は``-a``を外してください。
(sudoでしないと怒られたのでsudoつけてます)

```
sudo ./bin/install-mecab-ipadic-neologd -n -a
```
インストール途中でyes or noを聞かれるのでyesと答えてください。
<img width="650" alt="スクリーンショット 2019-01-09 1.47.03.png" src="https://qiita-image-store.s3.amazonaws.com/0/339669/749c3111-363c-a59a-1928-94d3da344bc4.png">
2019年1/8現在の追加辞書の追加内容。西野カナが出てくるあたり仕事早いですねぇ

このコマンド終了時にこんな感じの画面になると思います。
<img width="530" alt="スクリーンショット 2019-01-09 1.53.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/339669/0163ea85-6091-a635-2d76-07a3ab991af7.png">
この``-d``以降の階層に追加されています。
**追加辞書を使う際には指定してあげるのでメモっておきましょう**
###  導入確認
先ほど同様、コマンドでmecabと打つのですが、追加辞書インストール時に表示された階層を指定してあげます。

とりあえず使ってみましょう
<img width="653" alt="スクリーンショット 2019-01-09 1.58.11.png" src="https://qiita-image-store.s3.amazonaws.com/0/339669/09281d10-d69d-2677-b50e-baa57a79dd50.png">
和布蕪は正しく出力されませんでした。。。orz

一応比較
<img width="926" alt="スクリーンショット 2019-01-09 2.05.07.png" src="https://qiita-image-store.s3.amazonaws.com/0/339669/25294b4e-42de-4000-ce70-afca1afe59b4.png">
しっかり、``西野カナ``が一つの単語として分かち書きされました。
## 追加辞書の階層を忘れたら
追加辞書のインストール先を忘れた場合は以下を叩けば出てきます。

```
echo `mecab-config --dicdir`"/mecab-ipadic-neologd"
```

# mecabの使用方法・オプション
導入確認ではオプションを指定しませんでしたが、各オプションでより快適に使えます。
詳細はこちらを参照 http://taku910.github.io/mecab/#format
割と使うやつを表にまとめてみました。

| オプション  |     意味      |    実行例    |
|:--------------------|------------------|:------------:|
| -Owakati       | 分かち書きのみ |<img width="144" alt="スクリーンショット 2019-01-09 13.05.45.png" src="https://qiita-image-store.s3.amazonaws.com/0/339669/a1f2c42b-d36a-13ec-8b16-889ae635e8d5.png">|
| -Ochasen        | ChaSen互換で出力|<img width="446" alt="スクリーンショット 2019-01-09 13.06.25.png" src="https://qiita-image-store.s3.amazonaws.com/0/339669/3444b0d7-be63-c87e-4b6e-d263164f638d.png">|
| -Odump         | 全情報を表示 |<img width="663" alt="スクリーンショット 2019-01-09 13.06.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/339669/1b199520-6680-4916-e344-b4a7018fa472.png">|
|--unk-feature 'unknown'   |未知語をunknownとして判別|<img width="251" alt="スクリーンショット 2019-01-09 13.20.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/339669/db903946-d30b-e024-ee8a-9ef1d0c4d0f6.png">|

## コマンド上でテキストファイルを形態素解析する
以下で元ファイルと出力ファイルを指定することでサクッと形態素解析できます。

```
meacb -オプション < 元ファイル > < 出力ファイル >
```


# Pythonでmecabを使う
Python上でmecabを動かせるようにします。筆者の環境はPython3.6.7です。
pip経由で入れることができます。

```
pip install mecab-python3
```

ipythonあたりで``import Mecab``と打って確認しときましょう。

Pythonでの簡単な使用例として追加辞書との簡単な比較

```demo_mecab.py
import MeCab

wakati = MeCab.Tagger('-Owakati')    #分かち書き
neo_wakati = MeCab.Tagger('-Owakati -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd') #追加辞書を適用
word = input("分かち書き：")

wakati = wakati.parse(word).strip()
neo_wakati = neo_wakati.parse(word).strip()

print('通常辞書：' + wakati)
print('追加辞書：' + neo_wakati)
```
## 一度に処理できる入力文字列のバッファについて（修正）
デフォルトは8192のようです。
参照先は[こちら](http://www.mwsoft.jp/programming/munou/mecab_command.html#input-buffer-size)

# 追加辞書は自動的に反映されないよ！
上記のdemoコードにも書いてありますが・・・
追加辞書は、**階層を指定してあげないと意味がありません！**
筆者は最初気づいてませんでした^^;

```
(-d /usr/local/lib/mecab/dic/mecab-ipadic-neologd')
```
これをお忘れなく

# 参考
<http://taku910.github.io/mecab/>
https://runble1.com/python-mecab-morphological-analysis/
https://qiita.com/siraasagi/items/e07e0b271cb7cd679a70
http://www.mwsoft.jp/programming/munou/mecab_command.html