【NLP入門】環境構築から簡単な類似度計算まで♪

少し自然言語処理をやろうということで、Bash on Windows10に以下をインストールして遊んでみた。
・python
　（Python 3.5.2）
・MeCab
・辞書；mecab-ipadic-NEologd
・mecab-python3
・scikit-learn
　（joblib-0.13.2 numpy-1.17.1 scikit-learn-0.21.3 scipy-1.3.1）
・gensim（・fasttext・word2vec）
・zenhan
【参考】[Python の全角半角処理に zenhan が便利](http://atasatamatara.hatenablog.jp/entry/2013/04/15/201955)

###Bash on Windows をインストール
【参考】[Win10のBash on Windows をインストールする](https://qiita.com/yukio_tokuyoshi/items/042546812c663ceeccf3)
ここは参考のまんまです。ただし、プログラムと機能は横幅がないと下に出現しています。
###・python
Anacondaでインストールしようかなと思ったが、ここでは普通にPythonをまんまインストールしてみました。

```
sudo apt install python3
```
これでインストールされたのは、（Python 3.5.2）でした。
anacondaでやりたいときは以下のようなことを注意しないとです。
【参考】[bash for windows でanacondaディストリビューションのpython3でimportが出来ない](https://teratail.com/questions/79464)
###・MeCab
やりたいこととやることは参考の流れを参考にします。
【参考】
[scikit-learnを使ってテキストから素性ベクトルを取得する](https://tech.mof-mof.co.jp/blog/scikit-learn.html)
[Python3からMeCabを使う](https://qiita.com/taroc/items/b9afd914432da08dafc8)

```
$ brew install mecab
$ brew install mecab-ipadic
```
まず、その前に以下を実施します。

```
$ sudo apt update
$ sudo apt upgrade
```
そして、上記をやってみると、。。。以下のように出ます。

```
$ brew install mecab
プログラム 'brew' はまだインストールされていません。 次のように入力することでインストールできます:
sudo apt install linuxbrew-wrapper
```
ということで、以下でいろいろインストール出来ました。

```
$ sudo apt install linuxbrew-wrapper
```
そして、以下のようにmecabがインストールできました。

```
$ brew install mecab
========================================================================
You may want to update following environments after installed linuxbrew.

  PATH, MANPATH, INFOPATH

(example: /usr/share/doc/linuxbrew-wrapper/examples/profile)
========================================================================
==> This script will install:
/home/ubuntu/.linuxbrew/bin/brew
/home/ubuntu/.linuxbrew/Library/...
/home/ubuntu/.linuxbrew/share/man/man1/brew.1

Press RETURN to continue or any other key to abort
...
==> Downloading and installing Homebrew...
...
HEAD is now at 5320403 Troubleshooting.md: update link
Warning: /home/ubuntu/.linuxbrew/bin is not in your PATH.
==> Installation successful!
==> Next steps
Install the Linuxbrew dependencies:
Debian, Ubuntu, etc.:
  `sudo apt-get install build-essential`
```
以下は、少しいろいろやってから実施したせいか以下のようになっています。

```
$ sudo apt-get install build-essential
build-essential はすでに最新バージョン (12.1ubuntu2) です。
```
次にipadicを入れますが、以下のとおり入りません。

```
$  brew install mecab-ipadic
Error: cannot load such file -- os/linux/glibc
Please report this bug:
    https://github.com/Linuxbrew/linuxbrew/blob/master/share/doc/homebrew/Troubleshooting.md#troubleshooting
```

そして、brew install swigというmecab-python3に必要なDependencyを入れようとしますが、これも同じようにできませんでした。

```
$ brew install swig
Error: cannot load such file -- os/linux/glibc
Please report this bug:
    https://github.com/Linuxbrew/linuxbrew/blob/master/share/doc/homebrew/Troubleshooting.md#troubleshooting
```
次に、以下のpip3 install ipykernelを実行するとipython関連が入りました。

```
$ pip3 install ipykernel
Successfully installed backcall-0.1.0 decorator-4.4.0 ipykernel-5.1.2 ipython-7.8.0 ipython-genutils-0.2.0 jedi-0.15.1 j
upyter-client-5.3.1 jupyter-core-4.5.0 parso-0.5.1 pexpect-4.7.0 pickleshare-0.7.5 prompt-toolkit-2.0.9 ptyprocess-0.6.0
 pygments-2.4.2 python-dateutil-2.8.0 pyzmq-18.1.0 setuptools-41.2.0 six-1.12.0 tornado-6.0.3 traitlets-4.3.2 wcwidth-0.
1.7
```
いよいよ、mecabをpythonから利用するときに必要なmecab-python3を入れます。

```
$ pip install mecab-python3
Collecting mecab-python3
  Downloading https://files.pythonhosted.org/packages/40/e9/b6ba6580537a5261f615537f02a2a5be43652a653196e0e2d165934ac1af/mecab_python3-0.996.2-cp27-cp27mu-manylinux1_x86_64.whl (15.8MB)
    100% |████████████████████████████████| 15.9MB 120kB/s
Installing collected packages: mecab-python3
Successfully installed mecab-python3-0.996.2
```
無事に入りました。
pipで入れたので、python3になっているか心配になって以下のように再度pip3でやりましたが同じバージョンが入りました。

```
$ pip3 install mecab-python3
Successfully installed mecab-python3-0.996.2
```
###mecab-ipadic-NEologd をインストールする
【参考】[mecab-ipadic-NEologd : Neologism dictionary for MeCab](https://github.com/neologd/mecab-ipadic-neologd/blob/master/README.ja.md)
参考の通り、インストールしていく。

```
$ sudo apt install make automake autoconf autotools-dev m4 mecab libmecab-dev mecab-ipadic-utf8 git make curl xz-utils file

$ sudo sed -i -e 's%/lib/mecab/dic%/share/mecab/dic%' /usr/bin/mecab-config
```
以下で資材をダウンロードします。

```
$ git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
```
そしてインストールします。

```
mecab-ipadic-NEologd のインストールと更新
Step.1
$ cd mecab-ipadic-neologd
Step.2
以下のコマンドを実行して結果を確認する画面で「yes」と入力すると、sudo 権限で最新版がインストール(初回実行時以降は更新)されます。
$ ./bin/install-mecab-ipadic-neologd -n
```
最後に辞書がインストールされたディレクトリが確認できます。
これで、mecab-ipadic-NEologdがインストールできました。

```
以下のコマンドを実行すると辞書のディレクトリが確認できます。
$ echo `mecab-config --dicdir`"/mecab-ipadic-neologd"
```
さらに以下のおまじないを実施します。

```
全部入りな mecab-ipadic-NEologd を簡単にインストールする方法
標準インストールでは一部の辞書ファイルがインストールされません。
-a オプションを指定すると全部入り状態でインストールできます。
$ ./bin/install-mecab-ipadic-neologd -n -a
```
###mecab-ipadic-NEologd の使用（[Copyright (C) 2015-2019 Toshinori Sato (@overlast)](https://github.com/neologd/mecab-ipadic-neologd/blob/master/COPYING)）
上記のディレクトリを -d以下に置きます。

```
$ mecab -d /usr/share/mecab/dic/mecab-ipadic-neologd
お花茶屋は雨です
お花茶屋        名詞,固有名詞,一般,*,*,*,お花茶屋,オハナヂャヤ,オハナジャヤ
は      助詞,係助詞,*,*,*,*,は,ハ,ワ
雨      名詞,一般,*,*,*,*,雨,アメ,アメ
です    助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
EOS
```

```
$ echo "8月3日に放送された「中居正広の金曜日のスマイルたちへ」(TBS系)で、1日たった5分でぽっこりおなかを解消するというダイエット方法を紹介。キンタロー。のダイエットにも密着。" | mecab -d /usr/share/mecab/dic/mecab-ipadic-neologd
8月3日  名詞,固有名詞,一般,*,*,*,8月3日,ハチガツミッカ,ハチガツミッカ
に      助詞,格助詞,一般,*,*,*,に,ニ,ニ
放送    名詞,サ変接続,*,*,*,*,放送,ホウソウ,ホーソー
さ      動詞,自立,*,*,サ変・スル,未然レル接続,する,サ,サ
れ      動詞,接尾,*,*,一段,連用形,れる,レ,レ
た      助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
「      記号,括弧開,*,*,*,*,「,「,「
中居正広の金曜日のスマイルたちへ        名詞,固有名詞,一般,*,*,*,中居正広の金曜日のスマイルたちへ,ナカイマサヒロノキンヨウビノスマイルタチヘ,ナカイマサヒロノキンヨービノスマイルタチヘ
」(     記号,一般,*,*,*,*,*
TBS     名詞,固有名詞,一般,*,*,*,TBS,ティービーエス,ティービーエス
系      名詞,接尾,一般,*,*,*,系,ケイ,ケイ
)       記号,一般,*,*,*,*,*
で      助動詞,*,*,*,特殊・ダ,連用形,だ,デ,デ
、      記号,読点,*,*,*,*,、,、,、
1日     名詞,固有名詞,一般,*,*,*,1日,ツイタチ,ツイタチ
たった  副詞,助詞類接続,*,*,*,*,たった,タッタ,タッタ
5分     名詞,固有名詞,一般,*,*,*,5分,ゴフン,ゴフン
で      助詞,格助詞,一般,*,*,*,で,デ,デ
ぽっこり        副詞,一般,*,*,*,*,ぽっこり,ポッコリ,ポッコリ
おなか  名詞,一般,*,*,*,*,おなか,オナカ,オナカ
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
解消    名詞,サ変接続,*,*,*,*,解消,カイショウ,カイショー
する    動詞,自立,*,*,サ変・スル,基本形,する,スル,スル
という  助詞,格助詞,連語,*,*,*,という,トイウ,トユウ
ダイエット方法  名詞,固有名詞,一般,*,*,*,ダイエット方法,ダイエットホウホウ,ダイエットホウホー
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
紹介    名詞,サ変接続,*,*,*,*,紹介,ショウカイ,ショーカイ
。      記号,句点,*,*,*,*,。,。,。
キンタロー。    名詞,固有名詞,一般,*,*,*,キンタロー。,キンタロー,キンタロー
の      助詞,連体化,*,*,*,*,の,ノ,ノ
ダイエット      名詞,サ変接続,*,*,*,*,ダイエット,ダイエット,ダイエット
に      助詞,格助詞,一般,*,*,*,に,ニ,ニ
も      助詞,係助詞,*,*,*,*,も,モ,モ
密着    名詞,サ変接続,*,*,*,*,密着,ミッチャク,ミッチャク
。      記号,句点,*,*,*,*,。,。,。
EOS
```
###pythonアプリのための準備
まず、類似度計算などのためにscikit-learnをインストールします。
これで、numpyとscipyも入ります。

```
$ pip3 install scikit-learn
Successfully installed joblib-0.13.2 numpy-1.17.1 scikit-learn-0.21.3 scipy-1.3.1
```
次に、doc2vecやfasttextを利用するために、gensimをインストールします。
【参考】[models.keyedvectors – Store and query word vectors](https://radimrehurek.com/gensim/models/keyedvectors.html#gensim.models.keyedvectors.FastTextKeyedVectors)

```
$ pip3 install gensim
```
gensimの確認のために以下を動かしてみました。
【参考】[doc2vecのサンプル](https://qiita.com/nkmrtkhd/items/92500ba4a5979371a35f)

```
$ python3 sample_gensim_w2vec.py
訓練開始
Epoch: 1
Epoch: 2
Epoch: 3
Epoch: 4
Epoch: 5
Epoch: 6
Epoch: 7
Epoch: 8
Epoch: 9
Epoch: 10
Epoch: 11
Epoch: 12
Epoch: 13
Epoch: 14
Epoch: 15
Epoch: 16
Epoch: 17
Epoch: 18
Epoch: 19
Epoch: 20
SENT_0
[('SENT_1', 0.031334392726421356), ('SENT_3', -0.026536351069808006), ('SENT_2', -0.032195061445236206)]
SENT_3
[('SENT_2', 0.03055877611041069), ('SENT_1', -0.015100374817848206), ('SENT_0', -0.026536351069808006)]
SENT_1
[('SENT_0', 0.031334392726421356), ('SENT_3', -0.015100374817848206), ('SENT_2', -0.0521044060587883)]
[('今日', 0.01506108045578003), ('吠えた', -0.0007879622280597687), ('今', -0.004818214103579521), ('猫', -0.010754822753369808), ('泳ぐ', -0.01584682986140251), ('明日', -0.01980219967663288), ('犬', -0.020805783569812775), ('海', -0.0782541036605835)]
```
なるほどっていう感じの出力ですね。

今後の文字処理のためにzenhanを入れておきます。

```
$ pip3 install zenhan
Successfully installed zenhan-0.5.2
```
###まとめ
・自然言語処理に必要な環境を構築した
・一応、類似度まで計算できた

・次は本格的なアプリを作ろうと思う
###おまけ
今後のために参考を挙げておく
・[Doc2Vecを使用するまでの環境構築手順](https://qiita.com/talog/items/2675e234bb258682293a)
・[Doc2Vec を使って日本語の Wikipedia を学習する](https://note.mu/ofxmp3/n/n46d7182cd5aa)
・[FacebookのfastTextでFastに単語の分散表現を獲得する](https://qiita.com/icoxfog417/items/42a95b279c0b7ad26589)