ども
台風やばかったですね
雨と風が強すぎてぜんぜん寝れませんでした
うちの近くに去年の台風で傾いた建物があるんですがそれはなんか無事でした
どうでもいいですね
はい
アイドルで理解するTF-IDF第2回です
まだTF-IDFまでたどり着きません
TL;DR
Dockerを使って形態素解析&TF-IDF計算の環境作った
Ubuntu 18.04 + Python3.7 + MeCab + NEologd
- NEologdの辞書のPATHは必ずチェックしよう
docker-composeで形態素解析とTF-IDFの計算を実行するようにした
Dockerイメージを作る
Python3についてはPython3.7を使いたかったのでソースからビルドした。
MeCabとNEologdのインストールについてはMeCab用のDockerfile - sanshonokiの日記 を参考にDockerfileを書いた。
イメージの役割は形態素解析とTF-IDFの計算のみで、IPAフォントのインストールは不要と判断して削除した。Maplotlibで日本語入ったグラフを出すとかだったら入れないとダメ。
NEologdをMeCabのデフォルト辞書に設定する箇所について、参考にしたブログでは以下のようになっていた。
RUN sed -i 's/dicdir = \/var\/lib\/mecab\/dic\/debian/dicdir = \/usr\/lib\/mecab\/dic\/mecab-ipadic-neologd/' /etc/mecabrc
/etc/mecabrc
のdicdir
をNEologdの辞書のパスに置き換えているわけだけど、この置き換え先のパスが今回の環境では異なっていて、/usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd
となっていた。DockerイメージにNEologdをインストールしたら、一度そこでコンテナを実行して、NEologdの辞書のパスを確認するのがよさそう。
$ docker run -it イメージ名 /bin/bash $ echo `mecab-config --dicdir`"/mecab-ipadic-neologd"
辞書のパス確認のコマンドはNEologdのREADMEに書かれている。
今になって思ったけど、sedを使って書き換えるではなく手元にdicdir
を書き換えたmecabrcを用意してDockerイメージをビルドするときに置き換えるのもいいかもしれない。
$ docker run -it イメージ名 /bin/bash # NEologdの辞書のパスを確認 $ echo `mecab-config --dicdir`"/mecab-ipadic-neologd" # mecabrcを表示 $ cat /etc/mecabrc
ここで表示したmecabrcをコピーして手元で書き換える、とか。
とりあえず現状最新のDockerfile。
# ref. http://sanshonoki.hatenablog.com/entry/2018/10/09/231345 FROM ubuntu:18.04 RUN apt update \ && apt install -y \ build-essential \ zlib1g-dev \ libncurses5-dev \ libgdbm-dev \ libnss3-dev \ libssl-dev \ libreadline-dev \ libffi-dev \ wget \ git \ mecab \ curl \ libmecab-dev \ mecab-ipadic-utf8\ language-pack-ja \ xz-utils \ file \ openssl \ gawk \ sudo \ unzip \ && apt clean \ && update-locale LANG=ja_JP.UTF-8 # Set locale ENV LANG ja_JP.UTF-8 ENV LANGUAGE ja_JP.UTF-8 ENV LC_ALL ja_JP.UTF-8 # Install Python3.7 # ref. https://linuxize.com/post/how-to-install-python-3-7-on-ubuntu-18-04/ WORKDIR /usr/local/src RUN wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tar.xz \ && tar -xf Python-3.7.3.tar.xz \ && cd Python-3.7.3 \ && ./configure --enable-optimization \ && make \ && make altinstall # Install mecab-ipadic-NEologd WORKDIR /opt RUN git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git WORKDIR /opt/mecab-ipadic-neologd RUN ./bin/install-mecab-ipadic-neologd -n -y RUN cd /opt RUN rm -rf mecab-ipadic-neologd # Set mecab-ipadic-NEologd as default RUN sed -i 's/dicdir = \/var\/lib\/mecab\/dic\/debian/dicdir = \/usr\/lib\/x86_64-linux-gnu\/mecab\/dic\/mecab-ipadic-neologd/' /etc/mecabrc # Make directory and Copy code WORKDIR /home RUN mkdir code RUN mkdir output WORKDIR /home/code COPY code . CMD python3.7 -V
mecab-python
という名前をつけてDockerイメージをビルド。
docker build -t mecab-python .
docker-compose.ymlを作る
Dockerイメージの
/home/code
と/home/output
にそれぞれリポジトリ(https://github.com/NaoY-2501/tf_idf_with_idol)のcode
とoutput
を関連付ける。code/requirements_docker.txt
からmecab-python3とNumPyをインストール。tf_idf_with_idol.py
を実行
本当はDockerイメージをビルドする段階でパッケージをインストールしておきたかった。$ python3.7 -m pip install -r requirements_docker.txt
でPython3.7のpipであることを明示的にしてインストールしたにもかかわらず、docker-composeでコンテナを開始するとそのパッケージが見つからなくなっていた(今回、原因まで調べられていない)。そのためコンテナ開始のタイミングでインストールしている。
version: '2' services: mecab-python: build: . volumes: - ./code:/home/code - ./output:/home/output command: > /bin/bash -c "python3.7 -m pip install -U pip && python3.7 -m pip install -r requirements_docker.txt && python3.7 tf_idf_with_idol.py"
これで環境構築ができたので、次回は形態素解析とTF-IDFです。#stapyでのLTが終わってから書きます。
めっちゃどうでもいいし俺がやってもアレなだけなんだけど、このシリーズの冒頭は山崎愛ちゃん構文に寄せてます。