5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

docker+Jupyter+Rでテキストマイニングできる環境を作る

Posted at

やりたいこと

dockerのJupyterでRでテキストマイニングやりたい。MeCabRMeCabを使ったら出来そう!と思って jupyter/datascience-notebook のdockerコンテナにインストールしようとしてみたらハマったのでメモ。

起こった問題

とりあえずjupyter/datascience-notebookを起動してRのノートブックを作成するまではこちらなどを参考にしてさくっと。とりあえずJupyter上から環境を構築してみようとMeCabをインストールまでは手順通りでよかったのだが、いざRMeCabをインストールしようとしたら、エラーメッセージが・・・

# RMeCabをインストールしようとしたら・・・
install.packages("RMeCab", repos = "http://rmecab.jp/R", type = "source")
# うまくいかなかった
Warning message in install.packages("RMeCab", repos = "http://rmecab.jp/R", type = "source"):
installation of package RMeCab had non-zero exit statusUpdating HTML index of packages in '.Library'
Making 'packages.html' ... done

もう少し詳しくエラー内容を見るため、JupyterのterminalからRを起動し、同じようにインストールを試みる。

R
install.packages("RMeCab", repos = "http://rmecab.jp/R", type = "source")
RMeCab.cpp:59:70: error: narrowing conversion of 144 from int to char inside { } [-Wnarrowing]

どうやらc++のコード中でint->charのキャストに失敗している?エラーメッセージなどで検索していると、RMeCabはgcc-5の環境でインストールする必要があるらしい 。自分の環境のgccはバージョン7だった。これがRMeCabインストール失敗の原因のようだ。
※int->charのキャストに失敗するのはこれと同じ現象かもしれない。

インストール手順

最終的にうまくいったのは以下の手順。gcc-5を使ってRMeCabをインストールする。

0. 前提

こちらの記事などを参考にsudo が使えるjupyter/datascience-notebookのコンテナが立ち上がっている

1. MeCabをインストールする

install - rmecabのLinuxの説明に沿ってインストール。

sudo apt update
sudo apt install mecab libmecab-dev mecab-ipadic-utf8

インストールできているかを確認。

mecab
インストールに成功したよ!

以下のような結果が表示されたらOK。

インストール    名詞,一般,*,*,*,*,インストール,インストール,インストール
に      助詞,格助詞,一般,*,*,*,に,ニ,ニ
成功    名詞,サ変接続,*,*,*,*,成功,セイコウ,セイコー
し      動詞,自立,*,*,サ変・スル,連用形,する,シ,シ
た      助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
よ      助詞,終助詞,*,*,*,*,よ,ヨ,ヨ
!      記号,一般,*,*,*,*,!,!,!
EOS

2. gcc-5をインストールする

gcc-5をインストール。

sudo apt install gcc-5
sudo apt install g++-5
sudo apt install gfortran-5

3. update-alternativesでバージョンを切り替え

複数のgccバージョンがある環境ではupdate-alternativesでバージョンを切り替えて使う。今回はgcc-7 <->gcc-5の切り替えが必要。

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 10
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 10
sudo update-alternatives --install /usr/bin/gfortran gfortran /usr/bin/gfortran-5 10

ちなみに登録後は

update-alternatives --config gcc

とすれば、登録してあるバージョンから選択して切り替えができる。

参考

Ubuntu 14.04にGCC 4.9 をインストールする
update-alternativesの使い方

4. RMeCabをインストール

gccが導入出来たら、いよいよRMeCabをインストールする。terminalでRを起動するか、JupyterでRのNotebookを作成し

install.packages("RMeCab", repos = "http://rmecab.jp/R", type = "source")

でインストール。成功したかどうかを確認する。

library(RMeCab)
RMeCabC("インストールに成功したよ!")

できた!

RMeCab.png

Dockerfileとdocker-compose.yml

ここまでの作業をまとめたDockerfileとdocker-compose.ymlファイルを作成した。同一ディレクトリにこの2つのファイルを置いてdocker-compose up

docker-compose.yml
version: "2"
services:
  jupyter_rmecab: # サービス名
    container_name: Jupyter-RMeCab
    build: . # 現在のディレクトリのdockerfileから構築
    image: mochimo/jupyter-rmecab # buildで作るイメージ名
    ports:
      - "8888:8888" # ポート <host port>:<container port>
    user: root # sudoのため
    volumes:
      - "/home/[User]/[work]:/home/jovyan/work/" # workディレクトリのマウント。[User],[work]は適宜自分のユーザー名と作業フォルダ名に変更
    environment:
      TZ: Asia/Tokyo
      GRANT_SUDO: "yes" # sudoコマンドを使えるようにする
    restart: always # 常に自動で再起動。主にOS起動時に自動起動させるため
    command: start-notebook.sh --NotebookApp.token='' # コンテナ起動時の引数
Dockerfile
FROM jupyter/datascience-notebook
LABEL maintainer="mochimo"

USER root

# font/gcc5 インストール 
RUN apt-get update && apt-get install -y \
fonts-ipaexfont \
gcc-5 \
g++-5 \
gfortran-5 

# mecab インストール
RUN apt-get update && apt-get install -y mecab libmecab-dev mecab-ipadic-utf8

# gcc-5に切り替え
RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 10 && \
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 10 && \
update-alternatives --install /usr/bin/gfortran gfortran /usr/bin/gfortran-5 10

USER $NB_UID

# RMeCabのインストール
RUN R -e "install.packages(c('RMeCab'), repos='http://rmecab.jp/R', type='source')"
5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?