Python × 自然言語処理の環境を Docker コンテナに入れてみた

Docker の勉強がてら、Python での自然言語処理によく使われる CaboCha モジュールを使える Docker コンテナを作ったので手順を記しておきます。

イメージは Docker Hub のリポジトリに push してあります。

ちなみに CaboCha モジュールは単純に pip install で使える様なものではなく、条件付き確率場の自然言語処理向け実装である(CRF++)や、辞書ファイル(mecab-ipadic-neologd)などをインストールする必要があり面倒な印象です。

  1. Dockerfile を作ってみた
  2. CRF++ のダウンロード
  3. Docker イメージを作ってみた
  4. コンテナを作ってみた
  5. Python で CaboCha を使ってみた

Dockerfile を作ってみた

まず Dockerfile を作ります。というか今回ここが一番大事なところです。

以前↓の記事で VPS の Ubuntu に環境を構築したことがあるので、基本的にはその手順を流用しました。

そして ChatGPT の手を多分に借りました。

下記が Dockerfile の中身です。

# Dockerfile

# Use Ubuntu 20.04 as a base
FROM ubuntu:20.04

# Set environment variables
ENV DEBIAN_FRONTEND=noninteractive

# Update system packages
RUN apt-get update && apt-get install -y \
    build-essential \
    mecab \
    libmecab-dev \
    mecab-ipadic \
    git \
    wget \
    curl \
    bzip2 \
    python3 \
    python3-pip \
    sudo

# Install mecab-ipadic-neologd
WORKDIR /var/lib/mecab/dic
RUN git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
RUN ./mecab-ipadic-neologd/bin/install-mecab-ipadic-neologd -n -y

# Install CRF++
WORKDIR /root
COPY CRF++-0.58.tar .
RUN tar xvf CRF++-0.58.tar && \
    cd CRF++-0.58 && \
    ./configure && make && make install && \
    ldconfig && \
    rm ../CRF++-0.58.tar

# Install CaboCha
WORKDIR /root
RUN FILE_ID=0B4y35FiV1wh7SDd1Q1dUQkZQaUU && \
    FILE_NAME=cabocha-0.69.tar.bz2 && \
    curl -sc /tmp/cookie "https://drive.google.com/uc?export=download&id=${FILE_ID}" > /dev/null && \
    CODE="$(awk '/_warning_/ {print $NF}' /tmp/cookie)" && \
    curl -Lb /tmp/cookie "https://drive.google.com/uc?export=download&confirm=${CODE}&id=${FILE_ID}" -o ${FILE_NAME} && \
    bzip2 -dc cabocha-0.69.tar.bz2 | tar xvf - && \
    cd cabocha-0.69 && \
    ./configure --with-mecab-config=`which mecab-config` --with-charset=UTF8 && \
    make && make check && make install && \
    ldconfig && \
    cd python && python3 setup.py install

# Install mecab-python3
RUN pip3 install mecab-python3

# Cleanup apt cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# Set default work directory
WORKDIR /root

CMD ["/bin/bash"]

CRF++ ファイルのダウンロード

上記 Dockerfile の中に「COPY CRF++-0.58.tar .」の記述があります。

このファイルはこちらのリンクから直接ダウンロードしておく必要があったので、ダウンロードして Dockerfile と同じディレクトリに配置しました。

% ls
CRF++-0.58.tar	Dockerfile

Docker イメージを作ってみた

で、docker build でイメージを作成します。

% docker build -t python-cabocha:1.0 .

ここが成功すればあとはどうとでもなる気がします。

コンテナを作ってみた

「docker run」でコンテナを作成するとそのままコンテナ内に入ります。

% docker run --name cabocha-python -it python-cabocha:1.0
root@21c443991ed9:~#

Python で CaboCha を使ってみた

コンテナ内で Python を起動します。

root@21c443991ed9:~# python3

で、CaboCha を使ってみます。

>>> import CaboCha
>>> sentence = 'エンゼルスの大谷翔平投手が「3番・DH」でスタメン出場。前日に続き4打数無安打と2試合連続ノーヒットとなった。'
>>> c = CaboCha.Parser('-d /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd')
>>> print(c.parseToString(sentence))
         エンゼルスの-D              
         大谷翔平投手が---D          
            「3番・DH」で-D          
             スタメン出場。---------D
                       前日に-D     |
                           続き-----D
                    4打数無安打と---D
              2試合連続ノーヒットと-D
                             なった。
EOS

>>> 

無事使えました!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です