Windows10 64bit環境で最近の単語を含む文章を形態素解析する

# 問題
Windows10 64bit環境のPythonでMeCabを使おうとする際、
主に下記の5点で躓いて画面を割りたい気持ちでいっぱいになったので体系的にまとめました。

問題1：pip installのみではMeCabが入らない
問題2：インストールできたものの形態素解析がうまくいかない
問題3：NEologd辞書を用いることで固有表現の抽出が上手くいくらしいが
　　　 Windows環境ではインストールが難しい
問題4：インストールしようとするとPATHを通すのだがPATHの概念がよくわからない
問題5：DOSコマンドが通らない

# 目次
①64bit向けの非公式版の.exeからMeCabをインストール
②PythonでMeCabを扱うためのライブラリをインストール
③形態素解析をより精緻に行うために
　NEologdをgitからクローンしてコマンドプロンプトからコンパイル
※参考記事は各項にて記載

# ①64bit向けの非公式版の.exeからMeCabをインストール
参考：https://qiita.com/wanko5296/items/eeb7865ee71a7b9f1a3a

公式では32bit版しかサポートされていないので、
有志でビルドされている64bit版をインストールする方がbetter。

実行ファイルは下記のgitで公開されている。
https://github.com/ikegami-yukino/mecab/releases/tag/v0.996

実行ファイルをインストールする際に文字コードを選択するのだが、
自分が形態素解析を行いたい対象のテキストファイルの文字コードに合わせて選択する。
こだわりが無いのであれば、UTF-8を選択する。
（※デフォルトはSHIFT-JIS）

#②PythonでMeCabを扱うためのライブラリをインストール
参考：https://qiita.com/yukinoi/items/990b6933d9f21ba0fb43

cmdやAnaconda promptで　　

```
pip install sys
```

```
pip install MeCab
```


を実行。
上記の64-bit版MeCabをインストールしていれば上記のpipで通る。

jupyter notebookなどで

```python

import MeCab
```
でインストールできているか検証。

エラーが発生しないようであればこの段階で形態素解析は可能な状態となっている。
試しにやってみたい方は、

```python
import sys
import MeCab
m = MeCab.Tagger ("-Ochasen")
print(m.parse ("すもももももももものうち"))
```
と実行すると形態素解析ができているのが分かる。

ただ、最近の単語を含むワード（i.g. マイナンバー、欅坂46など）は
マイ/ナンバー、欅/坂/46のようになってしまう。

これを防ぐために、最近のKWリストを含むNEologd辞書をインストールすると良い。

# ③形態素解析をより精緻に行うためにNEologdをgitからクローンしてコマンドプロンプトからコンパイル
### ・準備編
参考：https://qiita.com/zincjp/items/c61c441426b9482b5a48
（基本的に上記の記事をPATHやDOSコマンドが分からない人向けに記載しました。）

必要なものとして64-bitのgitと7-zipをインストールしておく。
インストール方法に関してはここでは省略する。
**・git**
　参考：https://eng-entrance.com/git-install
**・7-zip**
　公式サイト：https://sevenzip.osdn.jp/

7-zipに環境変数を設定する必要がある。

```
C:\Program Files\7-Zip
```
さて、この環境変数というものを簡易的に紹介すると、
アプリケーションをcmdで簡易的に実行する設定のことで、PATHを通すとも言われる。

設定方法としてはコントロールパネル画面などで"環境変数"と検索すれば設定画面が出現する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65638/1ce14472-deb1-a2f3-0873-7b8f0fcaea46.png)

上記イメージの環境変数を編集を選択するとこのような画面になる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65638/7d0232a2-5d52-0ba5-0e7f-2733c362ffc8.png)
青塗のPathという部分を選択して**編集＞新規**で
7-zipのインストール先である下記を追加してOKを選択。
再掲になるが、インストール先は人によって異なり、デフォルトでは下記の通り。

```
C:\Program Files\7-Zip
```
これでいわゆるPATHが通った状態となる。

ここからNEologd辞書をインストールしていく。

### ・NEologd辞書をインストール&コンパイル

**管理者権限**でコマンドプロンプトを立ち上げ

```
git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
```
必要な辞書ファイルなどをダウンロード。
続いてダウンロードしたファイルのディレクトリに移動し、dirでダウンロードされているか確認する。
dir実行時にneologd～系のファイルが目視できれば問題ない。
seedフォルダが見当たらずエラーが出る場合は、
**C:\Users(ユーザー名)\mecab-ipadic-neologd\seed**から記載すればディレクトリに移動する。

```
cd mecab-ipadic-neologd\seed
dir
```
ちなみにmecab-ipadic-neologd\seedというディレクトリを読みに行くという意。

7-zipによる解凍が必要なので
下記コマンドを実行。
.xzファイルを7-zipで解答するの意。

```
7z X *.xz
```

続いて下記コマンドで辞書をコンパイルする。（MeCabで読める辞書形式に変える）
ただし、注意点がある。

**①NEologdは日々更新されているので、以降の20191024はすべて実際に
　自分がクローンした際にDLしたファイル名についている日付を選択する**
**②C:\Program Files\MeCab\bin\mecab-dict-indexは自分のMeCabのインストール先に合わせる**
**③本稿のmecabのインストール方法ではUTF-8を選択していたが、
　SHIFT-JIS環境でインストールしている場合は”-t utf-8”を”-t shift-jis”に変更する**


```
"C:\Program Files\MeCab\bin\mecab-dict-index" -d "C:\Program Files\MeCab\dic\ipadic" -u NEologd.20191024.dic -f utf-8 -t utf-8 mecab-user-dict-seed.20191024.csv

mkdir "C:\Program Files\MeCab\dic\NEologd"

move NEologd.20191024.dic "C:\Program Files\MeCab\dic\NEologd"
```

ちなみに、意味としては
C:\Program Files\MeCab\binにあるmecab-dict-index.exeを実行し、
cdの移動先である現在のディレクトリに存在する
mecab-user-dict-seed.20191024.csvをUTF-8形式で
NEologd.20191024.dicという名前でコンパイルする。
その後、C:\Program Files\MeCab\dicの中に、NEologdを作成し、その中にコンパイルしたものを移動する。

ここまでくれば、あとはもうほぼ終わりで
**C:\Program Files\MeCab\etcに存在しているmecabrc**をメモ帳で開いて
userdic =の部分をC:\Program Files\MeCab\dic\NEologd\Neologd.20191024.dic
に変更して上書き保存する。
権限によっては上書き保存できない場合もあるので、
別フォルダに一旦mecabrcを保存して元のところに保存すればよい。
その際に.txtを消すのを忘れずに。

実際にNEologdが適用されているか確認するには、jupyterなどで実際に形態素解析をした際に、
固有名詞として欅坂46が名詞認識されていればよい。

```python
import sys
import MeCab
m = MeCab.Tagger ("-Ochasen")
print(m.parse ("欅坂46が赤いきつねを食べている。"))
```
# おわり
より形態素解析の精度をあげていくためには、
一般的に公開されている日本語のストップワードリストを読み込んだり、
読み込む対象に特有の単語を地道にユーザー辞書として設定したり、
不要なものは地道にNGしていくことで精度があがっていくはずである。