前回までDockerのざっくりとした使い方を勉強してきました。今回はその知識を使って、実際の環境構築をしてみます。具体的には日本語形態素解析エンジンMeCabのPython開発環境の構築に挑戦してみます。
日本語形態素解析エンジンMeCabについて
ここで、今回インストールするMeCabについて説明します。
「MeCab」は、公式ホームページによると、『京都大学情報学研究科−日本電信電話株式会社コミュニケーション科学基礎研究所 共同研究ユニットプロジェクトを通じて開発されたオープンソース 形態素解析エンジン』だそうです。
「形態素解析」とは『文法的な情報の注記の無い自然言語のテキストデータ(文)から、対象言語の文法や、辞書と呼ばれる単語の品詞等の情報にもとづき、形態素(Morpheme, おおまかにいえば、言語で意味を持つ最小単位)の列に分割し、それぞれの形態素の品詞等を判別する作業』であるとのことです。(「形態素解析」フリー百科事典『ウィキペディア(Wikipedia)』(2022/6/11)より)
MeCabを使うと、下のように文章の単語を分割して、その単語の品詞を判別してくれます。自然言語の解析には必須といえる技術です。
MeCab自体はC言語で書かれたアプリケーションなので、Pythonで使うために、Pythonのライブラリmecab-python3を介して使うことになります。
Dockerで形態素解析エンジンMeCabのPython環境構築
さて、Dockerで形態素解析エンジンMeCabのPython開発環境を構築する手順を考えてみます。まずはベースとなるLinux環境を作って、その中に入って実際にインストールしてみて、必要なコマンドを把握します。そのうえで、その操作をベースとしてDockerfileを作り直して、MeCabのPython開発環境のDockerイメージを作成し、それをコンテナとして立ち上げてやります。
- DockerでLinux環境構築
- DockerのLinux環境でPythonとMeCabをインストール
- Pythonでの形態素解析に必要なライブラリ(jupyter-lab、mecab-python)をインストール
- 上記2と3をDockerfileの落とし込み、MeCab-PythonのDockerイメージ作成
- Dockerコンテナを作成し、仮想環境完成!
まずはDockerでベースの環境を立ち上げてみる
今回、ubuntuをベースとして使ってみます。Linux環境としては重いけど、MeCabやPythonのインストールが楽そうなので、Docker初学者にも手を出しやすそうです。。。
VSCodeでディレクトを作成し、ターミナルから「docker run -it ubuntu:20.04」でDocker Hubのubuntu:20.04の環境を読み込んでみます。
> docker run -it ubuntu:20.04
Unable to find image 'ubuntu:20.04' locally
20.04: Pulling from library/ubuntu
d7bfe07ed847: Already exists
Digest: sha256:fd92c36d3cb9b1d027c4d2a72c6bf0125da82425fc2ca37c414d4f010180dc19
Status: Downloaded newer image for ubuntu:20.04
root@457cbb65a38c:/#
うまく立ち上がりました。それでは最初にubuntuのパッケージの一覧の更新とアップデートを「apt-get update」と「apt-get upgrade」で実施してやります。
root@457cbb65a38c:/# apt-get update
Get:1 http://security.ubuntu.com/ubuntu focal-security InRelease [114 kB]
...(略)
Fetched 22.7 MB in 14s (1662 kB/s)
Reading package lists... Done
root@457cbb65a38c:/# apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages will be upgraded:
apt e2fsprogs libapt-pkg6.0 libcom-err2 libext2fs2 libss2 logsave
7 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 2874 kB of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libapt-pkg6.0 amd64 2.0.9 [839 kB]
...(略)
root@457cbb65a38c:/#
ubuntu標準のPython3をインストール
続いて、ubuntuが標準で提供してているPython3とpipを「apt -y install python3-pip」でパッケージごとインストールします。Python 3.8.10がインストールできました。
root@457cbb65a38c:/# apt -y install python3-pip
Reading package lists... Done
Building dependency tree
Reading state information... Done
...(略)
done.
root@457cbb65a38c:/#python3 --version
Python 3.8.10
root@457cbb65a38c:/#
MeCabのインストール
次にMeCabをインストールしていきます。ubuntuはMeCabと関連ファイルもaptコマンドで標準で提供してくれているようです。ここではMeCabとライブラリ、辞書ファイルを順次インストールしていきます。
apt -y install mecab
apt -y install libmecab-dev
apt -y install mecab-ipadic-utf8
root@457cbb65a38c:/# apt -y install mecab
...(略)
done!
update-alternatives: using /var/lib/mecab/dic/juman-utf8 to provide /var/lib/mecab/dic/debian (mecab-dictionary) in auto mode
Setting up mecab-jumandic (7.0-20130310-7) ...
Setting up mecab (0.996-10build1) ...
debconf: unable to initialize frontend: Dialog
debconf: (No usable dialog-like program is installed, so the dialog based frontend cannot be used. at /usr/share/perl5/Debconf/FrontEnd/Dialog.pm line 76.)
debconf: falling back to frontend: Readline
Processing triggers for libc-bin (2.31-0ubuntu9.9) ...
root@457cbb65a38c:/# apt -y install libmecab-dev
...(略)
The following NEW packages will be installed:
libmecab-dev
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
...(略)
root@457cbb65a38c:/# apt -y install mecab-ipadic-utf8
...(略)
done!
update-alternatives: using /var/lib/mecab/dic/ipadic-utf8 to provide /var/lib/mecab/dic/debian (mecab-dictionary) in auto mode
root@457cbb65a38c:/#
MeCabを使ってみる
それでは確認してみます。MeCab 0.996がインストールできました。「mecab」と入力すると改行されて入力待ちの状態になります。そこに直接日本語を入力すると、ちゃんと文章を解析してくれました。そのまま、連続で入れれるようで、終了時は「ctrl+c」でMeCabから抜けられます。
root@457cbb65a38c:/# mecab -v
mecab of 0.996
隣の客はよく柿食う客だ。
隣 名詞,一般,*,*,*,*,隣,トナリ,トナリ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
客 名詞,一般,*,*,*,*,客,キャク,キャク
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
よく 副詞,一般,*,*,*,*,よく,ヨク,ヨク
柿 名詞,一般,*,*,*,*,柿,カキ,カキ
食う 動詞,自立,*,*,五段・ワ行促音便,基本形,食う,クウ,クウ
客 名詞,一般,*,*,*,*,客,キャク,キャク
だ 助動詞,*,*,*,特殊・ダ,基本形,だ,ダ,ダ
。 記号,句点,*,*,*,*,。,。,。
EOS
^C
root@457cbb65a38c:/#
ここまでうまくいきました。
後半では、必要なPythonで必要なライブラリを入れて、最後にDockerイメージを作るところまで行きたいと思います。
コメント