search
LoginSignup
8

More than 1 year has passed since last update.

posted at

updated at

DockerでPython公式イメージ + MeCab + NEologd辞書

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は優秀ですね。

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
What you can do with signing up
8