前回
Scarpy でエロマーケットの商品情報をクロールして CSV を作った
今回は
Mecab のセットアップと単語登録をする
mecab と ipadic のインストール
まず、 mecab をインストール
$ brew install mecab
IPA 辞書をインストール
$ brew install mecab-ipadic
NEOLogd をインストール
NEOLogd という追加辞書があり、新しい言葉がいっぱい入っているので入れる
$ git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
$ ./bin/install-mecab-ipadic-neologd -n
インストール中には
[install-mecab-ipadic-NEologd] : Do you want to install mecab-ipadic-NEologd? Type yes or no.
と、聞かれるので yes と打つ
NEOLogd のありなしの違い
NEOLogd 使わない場合と、使う場合で「アヘ顔ダブルピース」という言葉がどう分割されるかみてみる
使わない場合
$ mecab
アヘ顔ダブルピース
アヘ 名詞,一般,*,*,*,*,*
顔 名詞,接尾,一般,*,*,*,顔,ガオ,ガオ
ダブル 名詞,一般,*,*,*,*,ダブル,ダブル,ダブル
ピース 名詞,一般,*,*,*,*,ピース,ピース,ピース
EOS
使う場合
$ mecab -d "$(mecab-config --dicdir)/mecab-ipadic-neologd"
アヘ顔ダブルピース
アヘ顔 名詞,固有名詞,一般,*,*,*,アヘ顔,アヘガオ,アヘガオ
ダブルピース 名詞,固有名詞,一般,*,*,*,ダブルピース,ダブルピース,ダブルピース
EOS
このように、アヘ顔とダブルピースが単語として認識されているのがわかる
ちなみに "$(mecab-config --dicdir)/mecab-ipadic-neologd"
は NEOLogd の辞書のある場所を示している。
python で mecab を使う
mecab-python3 ライブラリをインストール
$ python -m pip install mecab-python3
それで、以下のように 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 にユーザー辞書を追加する仕組みを作る
これ、昔やろうとしてめちゃめんどくさかったイメージがある
この記事を参考にしながらやる
ero_words.csv
というファイルを作り試しにこんな単語を作りました。 NEOLogd に追加する場合は UTF-8 で書く
アヘ顔ダブルピース,,,,名詞,一般,*,*,*,*,アヘ顔ダブルピース,アヘガオダブルピース,アヘガオダブルピース,追加エントリ
以下のリンクから ipadic をダウンロードする。
ipadic を展開して UTF-8 にする
$ 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 まではしないらしい)
$ cd mecab-ipadic-2.7.0-20070801
$ $(mecab-config --libexecdir)/mecab-dict-index -f utf-8 -t utf-8
$ ./configure --with-charset=utf8
以下からモデルファイルのダウンロード
解凍して、 UTF-8 にする
$ 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` を作る
$ $(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
というシェルスクリプトにしておく
#!/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 を開く
$ vim $(mecab-config --dicdir)/mecab-ipadic-neologd/dicrc
で、以下のように絶対パスで ero_words.dic の位置を書く
userdic = /path/to/directory/ero_words.dic
で、アヘ顔ダブルピースが単語として登録されたか確認
mecab -d "$(mecab-config --dicdir)/mecab-ipadic-neologd"
アヘ顔ダブルピース
アヘ顔ダブルピース 名詞,一般,*,*,*,*,アヘ顔ダブルピース,アヘガオダブルピース,アヘガオダブルピース,追加エントリ
できてた
ちょっと、 ipadic で dic ファイルを作って、 neologd に登録するって感じがわかりにくいかもね
とにかく、再掲にはなるが以下のエントリに step by step で従うのが良い
ここまでやったことを振り返る
ここで、ここまで出来るようになったことを振り返る。
MeCab, NEOLogd, mecab-python3 を導入、 Python から MeCab が使えるようになった。
make_dic.sh というスクリプトを作って、 MeCab に単語の登録ができるようになった
やっぱり
MeCab のユーザー辞書登録のワークフローは結構めんどくさい
次は
Mecab にエロ単語を大量にぶっ込む部分を作って行く