Docker の勉強がてら、Python での自然言語処理によく使われる CaboCha モジュールを使える Docker コンテナを作ったので手順を記しておきます。
イメージは Docker Hub のリポジトリに push してあります。
ちなみに CaboCha モジュールは単純に pip install で使える様なものではなく、条件付き確率場の自然言語処理向け実装である(CRF++)や、辞書ファイル(mecab-ipadic-neologd)などをインストールする必要があり面倒な印象です。
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
>>>
無事使えました!
