エロマーケットプレースの研究シリーズ 3: MeCab の導入と単語登録の準備

# 前回

https://qiita.com/c1z/items/3df2a2f7e424958bb706

Scarpy でエロマーケットの商品情報をクロールして CSV を作った

# 今回は

Mecab のセットアップと単語登録をする

# mecab と ipadic のインストール

まず、 mecab をインストール

```bash
$ brew install mecab
```

IPA 辞書をインストール

```bash
$ brew install mecab-ipadic
```

# NEOLogd をインストール

NEOLogd という追加辞書があり、新しい言葉がいっぱい入っているので入れる

```bash
$ git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
$ ./bin/install-mecab-ipadic-neologd -n
```

インストール中には

```bash
[install-mecab-ipadic-NEologd] : Do you want to install mecab-ipadic-NEologd? Type yes or no.
```

と、聞かれるので yes と打つ

# NEOLogd のありなしの違い

NEOLogd 使わない場合と、使う場合で「アヘ顔ダブルピース」という言葉がどう分割されるかみてみる

使わない場合

```bash
$ mecab                                                   
アヘ顔ダブルピース
アヘ	名詞,一般,*,*,*,*,*
顔	名詞,接尾,一般,*,*,*,顔,ガオ,ガオ
ダブル	名詞,一般,*,*,*,*,ダブル,ダブル,ダブル
ピース	名詞,一般,*,*,*,*,ピース,ピース,ピース
EOS
```

使う場合

```bash
$ mecab -d "$(mecab-config --dicdir)/mecab-ipadic-neologd"  
アヘ顔ダブルピース
アヘ顔	名詞,固有名詞,一般,*,*,*,アヘ顔,アヘガオ,アヘガオ
ダブルピース	名詞,固有名詞,一般,*,*,*,ダブルピース,ダブルピース,ダブルピース
EOS
```

このように、アヘ顔とダブルピースが単語として認識されているのがわかる

ちなみに `"$(mecab-config --dicdir)/mecab-ipadic-neologd"` は NEOLogd の辞書のある場所を示している。

# python で mecab を使う

mecab-python3 ライブラリをインストール

```bash
$ python -m pip install mecab-python3
```

それで、以下のように python で書く

```python
import subprocess
import MeCab
import os

# neologd のディレクトリを取得
dicdir = subprocess.run(['mecab-config', '--dicdir'], capture_output=True).stdout.decode('utf-8').strip()
neologd_dir = os.path.join(dicdir, 'mecab-ipadic-neologd')

# neologd を使って分かち書きする
tagger = MeCab.Tagger(f'-Owakati -d {neologd_dir}')
print(tagger.parse('アヘ顔ダブルピース').split()) # -> ['アヘ顔', 'ダブルピース']
```

# MeCab NEOLogd にユーザー辞書を追加する仕組みを作る

これ、昔やろうとしてめちゃめんどくさかったイメージがある

https://zenn.dev/suyaa/articles/cb8a7e0c2767b3

この記事を参考にしながらやる

`ero_words.csv` というファイルを作り試しにこんな単語を作りました。 NEOLogd に追加する場合は UTF-8 で書く

```
アヘ顔ダブルピース,,,,名詞,一般,*,*,*,*,アヘ顔ダブルピース,アヘガオダブルピース,アヘガオダブルピース,追加エントリ
```

以下のリンクから ipadic をダウンロードする。

[ダウンロード](https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7MWVlSDBCSXZMTXM)

ipadic　を展開して UTF-8 にする

```bash
$ tar xvfz mecab-ipadic-2.7.0-20070801.tar.gz
$ nkf --overwrite -Ew mecab-ipadic-2.7.0-20070801/*
```

`mecab-ipadic-2.7.0-20070801/dicrc` の　`config-charset = EUC-JP` となっているところを以下のように修正

```
config-charset = UTF-8
```
 
mecab-dict-index を実行して configure をする（make まではしないらしい）

```bash
$ cd mecab-ipadic-2.7.0-20070801
$ $(mecab-config --libexecdir)/mecab-dict-index -f utf-8 -t utf-8
$ ./configure --with-charset=utf8
```

以下からモデルファイルのダウンロード

[ダウンロード](https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7bnc5aFZSTE9qNnM)

解凍して、　UTF-8 にする

```bash
$ bzip2 -d mecab-ipadic-2.7.0-20070801.model.bz2
$ nkf --overwrite -Ew mecab-ipadic-2.7.0-20070801.model
```

`mecab-ipadic-2.7.0-20070801.model` の `charset` の行を以下のようにする

```
charset: UTF-8
```

以下のコマンドで、先ほど作った `ero_words_no_cost.csv` からコストを追加した　``ero_words.csv` を作る

```bash
$ $(mecab-config --libexecdir)/mecab-dict-index \
    -m mecab-ipadic-2.7.0-20070801.model \
    -d mecab-ipadic-2.7.0-20070801 \
    -u ero_words_with_cost.csv \
    -f utf-8 -t utf-8 \
    -a ero_words.csv
```

で、以下のコマンドで辞書ファイルを作る

```bash
$ $(mecab-config --libexecdir)/mecab-dict-index \
    -d mecab-ipadic-2.7.0-20070801 \
    -u ero_words.dic \
    -f utf-8 \
    -t utf-8 \
    ero_words_with_cost.csv
```


この二つのコマンドは以下のように `make_dic.sh` というシェルスクリプトにしておく

```bash
#!/bin/bash

set -e

$(mecab-config --libexecdir)/mecab-dict-index \
    -m mecab-ipadic-2.7.0-20070801.model \
    -d mecab-ipadic-2.7.0-20070801 \
    -u ero_words_with_cost.csv \
    -f utf-8 \
    -t utf-8 \
    -a ero_words.csv

$(mecab-config --libexecdir)/mecab-dict-index \
    -d mecab-ipadic-2.7.0-20070801 \
    -u ero_words.dic \
    -f utf-8 \
    -t utf-8 \
    ero_words_with_cost.csv
```

で、 make_dic.sh をすると ero_words.dic というファイルができる

できた ero_words.dic の絶対パスを neologd の dicrc に書く、以下のように neologd の dicrc を開く

```bash
$ vim $(mecab-config --dicdir)/mecab-ipadic-neologd/dicrc
```

で、以下のように絶対パスで ero_words.dic の位置を書く

```
userdic = /path/to/directory/ero_words.dic

```

で、アヘ顔ダブルピースが単語として登録されたか確認

```bash
mecab -d "$(mecab-config --dicdir)/mecab-ipadic-neologd"  
アヘ顔ダブルピース
アヘ顔ダブルピース	名詞,一般,*,*,*,*,アヘ顔ダブルピース,アヘガオダブルピース,アヘガオダブルピース,追加エントリ
```

できてた

ちょっと、 ipadic で dic ファイルを作って、 neologd に登録するって感じがわかりにくいかもね

とにかく、再掲にはなるが以下のエントリに step by step で従うのが良い

https://zenn.dev/suyaa/articles/cb8a7e0c2767b3

# ここまでやったことを振り返る

ここで、ここまで出来るようになったことを振り返る。

MeCab, NEOLogd, mecab-python3 を導入、 Python から MeCab が使えるようになった。

make_dic.sh というスクリプトを作って、　MeCab に単語の登録ができるようになった

# やっぱり

MeCab のユーザー辞書登録のワークフローは結構めんどくさい

# 次は

https://qiita.com/c1z/items/90b3eb9c34df8ad25755

Mecab にエロ単語を大量にぶっ込む部分を作って行く