MeCabについて
mecab-ipadic-neologd
形態素解析
がなんぞや?MeCab
とはなんぞや?という疑問に関しては他の方のブログでも詳しく解説されていると思いますので、ここでは省きます。
MeCabの辞書ですが、デフォルトのもの以外では、おそらく多くの人が使っているものとしてmecab-ipadic-neologd
が挙げられるかと思います。LINE株式会社さんが開発しているOSSで新語・固有表現に強いMeCabの辞書で、今尚頻繁に更新されています。ちなみに2021年の新語・流行語大賞に輝いたリアル二刀流もNEologdにかかればこんな感じ
$ mecab -d {デフォルト辞書のパス}
リアル二刀流
リアル 名詞,固有名詞,一般,*,*,*,リアル,リアル,リアル
二刀流 名詞,一般,*,*,*,*,二刀流,ニトウリュウ,ニトーリュー
$ mecab -d {mecab-ipadic-neologdのパス}
リアル二刀流
リアル二刀流 名詞,固有名詞,一般,*,*,*,リアル二刀流,リアルニトウリュウ,リアルニトウリュー
辞書の設定
MeCabでどの辞書を使うのか設定する方法は以下の通りです
明示的に指定する方法
Pythonでは
# python
import Mecab
mecab = MeCab.Tagger(f'-d {使用する辞書のパス}')
ターミナルからは
# shell
$ mecab -d {使用する辞書のパス}
予めデフォルトの辞書を変更しておく方法
# デフォルトの辞書が設定されているmecabrcというファイルを探す
$ mecab-config --sysconfdir
# 例えば自分のMacでは以下のディレクトリ直下でした
/opt/homebrew/etc
# 今回使用するPython公式イメージ3.9(Debian GNU/Linux 11)では以下でした
/etc
# 一先ずmecabrcがどうなっているか確認すると辞書のパスを指定している行を確認できる
dicdir = /var/lib/mecab/dic/debian # こんな感じだったり
dicdir = /opt/homebrew/lib/mecab/dic/ipadic # こんな感じだったり
# 上の定義を新しく mecab-ipadic-neologdのパスにすることでデフォルト辞書が変更される
なおインストールしたmecab-ipadic-neologd
のパスですが、以下のコマンドで分かリます。(公式レポジトリにも記載されているので参照してください)
$ echo `mecab-config --dicdir`"/mecab-ipadic-neologd"
Docker環境の構築
Dockerfile、docker-compose.ymlについては
Python公式イメージ
DockerHubにあるPythonの公式イメージです。https://hub.docker.com/_/python/
別にUbuntuイメージでもなんでもいいのですが、自分はPython環境を構築するときはPython公式イメージを引っ張ってくることが多いので今回はこちらを使用します。
Dockerfile
Dockerfileで書くべきは以下のような記述です。色々やり方はあると思います。
FROM python:3.9
# mecabの導入
RUN apt-get -y update && \
apt-get -y upgrade && \
apt-get install -y mecab && \
apt-get install -y libmecab-dev && \
apt-get install -y mecab-ipadic-utf8 && \
apt-get install -y git && \
apt-get install -y make && \
apt-get install -y curl && \
apt-get install -y xz-utils && \
apt-get install -y file && \
apt-get install -y sudo
# mecab-ipadic-NEologdのインストール
RUN git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git && \
cd mecab-ipadic-neologd && \
./bin/install-mecab-ipadic-neologd -n -y && \
echo dicdir = `mecab-config --dicdir`"/mecab-ipadic-neologd">/etc/mecabrc && \
sudo cp /etc/mecabrc /usr/local/etc && \
cd ..
前半はMeCabの導入、後半でmecab-ipadic-NEologd辞書をインストールしています。また先ほど、
echo `mecab-config --dicdir`"/mecab-ipadic-neologd"
でインストールした辞書のディレクトリパスを標準出力できると書きましたが、その結果を/etc/mecabrc
にリダイレクトすることでMeCabのデフォルト辞書を再定義しています。丁度下記の部分ですね。
echo dicdir = `mecab-config --dicdir`"/mecab-ipadic-neologd">/etc/mecabrc
あと、これは結構ハマりポイントだと思うのですが、以下のようにmecabrc
を指定の場所にコピーしてあげ無いと動きません。ターミナルからは使えるんですがpython-mecab
で使おうとするとパスが通って無いってエラーが出てしまいます。。。
sudo cp /etc/mecabrc /usr/local/etc && \
一応、今までの流れ含め GitHub にあげておきました。それにしても早速リアル二刀流
が反映されているNEologdは優秀ですね。