LoginSignup
0
0

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-05-23

前回

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.modelcharset の行を以下のようにする

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 にエロ単語を大量にぶっ込む部分を作って行く

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0