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 >>>
無事使えました!