2020年9月28日月曜日

PythonでMeCabが使える環境をDockerで作成する

Docker Composeを利用してPythonでMaCabが使えるDockerコンテナを作成したので、その方法をまとめておく。MeCabはオープンソースの形態素解析エンジン。



環境


Docker Desktop(Windows10 Pro)。



MeCabインストールに必要なファイルを準備

MeCabをソースファイルからインストールするので、MeCab: Yet Another Part-of-Speech and Morphological AnalyzerからMeCab本体のソース(mecab-0.996.tar.gz)とIPA辞書(mecab-ipadic-2.7.0-20070801.tar.gz)をダウンロードしておく。


Dockerfileの作成

Docker Hubにある公式Pythonイメージのpython:3.8-busterをベースにイメージを作成する。Dockerfileでは主に以下のことを行う。ダウンロードしたmecab-0.996.tar.gzとmecab-ipadic-2.7.0-20070801.tar.gzはmecabというフォルダに置いておく。

  • MeCabのインストール
  • IPA辞書のインストール
  • 日本語フォント(fonts-takao)インストール
  • ロケールの設定
  • デフォルト設定だとMeCabでは半角記号が名詞・サ変接続に分類されるので記号に分類されるように設定を変更
  • MeCabのPythonラッパーインストール
  • ユーザーの作成

FROM python:3.8-buster

# 作業ディレクトリを作り移動する
WORKDIR /work

# localesと日本語フォントのインストール
RUN apt update \
 && apt -y install --no-install-recommends \
    locales \
	fonts-takao \
 && sed -i -e 's/# ja_JP.UTF-8 UTF-8/ja_JP.UTF-8 UTF-8/' /etc/locale.gen \
 && locale-gen \
 &&	apt clean \
 &&	fc-cache -fv

COPY ./mecab/* /work/

# MeCabインストール
# ldconfigはライブラリパスのキャッシュ更新用
RUN tar zxvf mecab-0.996.tar.gz \
 && cd mecab-0.996 \
 && ./configure \
 && make \
 && make check \
 && make install \
 && ldconfig \
 && cd ../ \
 && rm -rf mecab-0.996

# IPA辞書インストール
# 半角記号が名詞・サ変接続になるのを記号・一般に変更
RUN tar zxvf mecab-ipadic-2.7.0-20070801.tar.gz \
 && cd mecab-ipadic-2.7.0-20070801 \
 && iconv -f eucjp -t utf8 unk.def > unk_utf8.def \
 && sed -i -e 's/SYMBOL,1283,1283,17585,名詞,サ変接続,\*,\*,\*,\*,\*/SYMBOL,1283,1283,17585,記号,一般,\*,\*,\*,\*,\*/' unk_utf8.def \
 && mv unk.def unk.def.original \
 && iconv -f utf8 -t eucjp unk_utf8.def > unk.def \
 && ./configure --with-charset=utf8 --enable-utf8-only \
 && make \
 && make install \
 && cp unk.def /usr/local/lib/mecab/dic/ipadic \
 && cd ../ \
 && rm -rf mecab-ipadic-2.7.0-20070801

# ロケールの設定
ENV    LANG="ja_JP.UTF-8" \
    LANGUAGE="ja_JP:ja" \
	LC_ALL="ja_JP.UTF-8"

# MeCabのPythonラッパーインストール
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

# インストールに使用したファイルを削除
RUN rm -rf /work/*

#  ユーザーを作成してデフォルトユーザーにする
RUN groupadd -r pyuser \
 && useradd --no-log-init -r -g pyuser pyuser
USER pyuser
インストールするPythonラッパーはrequirments.txtに記載しておく。


Docker-compose.ymlの作成

Dockerfileでイメージ作成の準備が出来たので、次はdocker-compose.ymlを用意する。

version: "3"
services:
  pymecab:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: pymecab
    hostname: pymecab
    # コンテナを起動し続ける
    tty: true
    environment:
	  # タイムゾーン設定
      TZ: 'Asia/Tokyo'

最終的に以下のファイル構成となる。


イメージのビルド。


コンテナ上のPythonでMeCabを使う


コンテナを起動してコンテナに入る。


コンテナ上のPythonでMeCabを使ってみる。


0 件のコメント:

コメントを投稿