キカガクで自然言語処理を勉強

今回は無料でDeep learningについて学べるキカガクというサイトで自然言語処理を勉強していた時に、勉強になったという場所を書いていきたいと思います。

# 実行環境
・ MacOS
・ Python3.6(anaconda)
・ VSCode

# 引用文献
[図解！Python BeautifulSoupの使い方を徹底解説！(select、find、find_all、インストール、スクレイピングなど)](https://ai-inter1.com/beautifulsoup_1/#:~:text=Beautiful%20Soup(%E3%83%93%E3%83%A5%E3%83%BC%E3%83%86%E3%82%A3%E3%83%95%E3%83%AB%E3%83%BB%E3%82%B9%E3%83%BC%E3%83%97),%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0%E7%94%A8%E3%81%AE%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%A7%E3%81%99%E3%80%82&text=Python%E3%81%A7%E3%81%AF%E3%80%81Beautiful%20Soup%E3%82%92,%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82)
[【Python】文字列の大文字・小文字変換（lower、upper関数）](https://algorithm.joho.info/programming/python-lower-upper/)
[リポジトリをクローンする](https://docs.github.com/ja/free-pro-team@latest/github/creating-cloning-and-archiving-repositories/cloning-a-repository)
[2019年末版 形態素解析器の比較](https://qiita.com/hi-asano/items/aaf406db875f1c81530e)
[MacにMeCabを利用できる環境を整える](https://qiita.com/paulxll/items/72a2bea9b1d1486ca751)
[MeCabでの形態素解析 on Mac](https://qiita.com/hisawa/items/e0a5592e8f7c0dcda430)
[macで、JUMAN++をPythonのpyenv環境で使うための設定](https://gist.github.com/dogrunjp/0d2c6207e45fb1c473dd0b2323fa1606)
[pyknp(JUMANN++)で形態素解析してみた](https://dev.classmethod.jp/articles/pyknpjumann-tutorial/)
[PythonでJuman++を動かす](https://blog.imind.jp/entry/2019/01/12/192936)


# 分からなくて調べたところ
#### BeautifulSoupって何？
まず初めましてのbeautifulsoupさんです。
これがなんなのかというとhtmlmの文から必要な情報だけを抽出することができるライブラリになっております。例えば、ネット上にあるHTMLの文章って`'div'`や`'h1'`で囲まれていると思います。しかし、文章を解析する上ではこういったタグは邪魔なものになるので、これを取り除いた情報だけ取得するのがbeautifulsoupになります。

#### lower()関数とは？
`lower関数`と`upper関数`というのがありまして、それぞれ**小文字**にする関数と**大文字**にするための関数になります。

#### 形態素解析
形態素解析に`MeCab`と`Juman++`が良さげだったので、インストールしました。
MeCabがおそらく速さの面などを考えても1番良くて、精度だけを追求するならJuman++が良いみたいでした。
Mecabのインストールは結構簡単にできました。

```
$ brew install mecab
$ brew install mecab-ipadic
$ pip install mecab-python3
$ git clone url
```
git cloneの後のURLは[Githubレポジトリ](https://github.com/neologd/mecab-ipadic-neologd)からコピーしてきたURLを貼り付けます。

```python

import MeCab
m = MeCab.Tagger('-d/usr/local/lib/mecab/dic/mecab-ipadic-neologd')
text = '<html>ゼロから作るDeep learning</html>'
print(m.parse(text))
```
MeCabはこんな感じで書いていきます。
ちなみに、`Tagger()`のカッコ内に

+ -Ochasen
+ -Owakati
+ -Oyomi

を指定することができます。

Juman++はpythonで使えるようにするために、`pyknpのインストール`も必要でした。

```
$ brew install jumanpp
$ pip install pyknp
```
これで`Juman++`と`Pyknp`のインストールは完了です。
次にPython上でのJuman++の書き方について書いていきます。

```python

from pyknp.juman.juman import Juman
juman = Juman()
result = juman.analysis("外国人参政権")
for mrph in result.mrph_list():
    print(mrph.midasi, mrph.yomi)
```
Juman++はこんな感じでPython上で書きます。Juman++を使っていますが、コードを書く上では`Juman`のままで大丈夫みたいですね。
printの部分のmidasiやyomiに加えて、`mrph.genkei, mrph.hinsi, mrph.bunrui, mrph.katuyou1, mrph.katuyou2, mrph.imis, mrph.repname`を追加することもできます。

# 自然言語処理に関係なく分からなかったところ
単語ごとに抽出することが可能な関数である`split`を使いました。
最初自然言語処理に特化した関数なのかなと思っていたのですが、普通にpythonの関数でした。
**splitは単語ごとに区切って文を出力してくれます。**

しかし、splitだけだとコンマの後の余白がそのまま残った状態で出力されるため見栄え的にあまりよろしくないということで使われるのが、`strip`という関数です。
これを使うことによって、余白を除いた状態で出力することが可能です。

# まとめ
今回は形態素解析の部分に結構時間がかかってしまいましたね。
しかし、これから自然言語処理をしていく上では必要な知識かなと思ったので、丁寧に学べて良かったかなと思います。