はじめに
気軽に形態素解析できるようにNElogdが入ったDockerイメージを作りました。
Dockerfileと、Alpine Linux、MeCab/NEologdの自動構築に関して得られた知見を共有します🤗
使い方
$ echo "10日放送の「中居正広のミになる図書館」(テレビ朝日系)で、SMAPの中居正広が、篠原信一の過去の勘違いを明かす一幕があった。" | \
docker run -i -a STDIN -a STDOUT nownabe/mecab-neologd
10日 名詞,固有名詞,一般,*,*,*,10日,トオカ,トオカ
放送 名詞,サ変接続,*,*,*,*,放送,ホウソウ,ホーソー
の 助詞,連体化,*,*,*,*,の,ノ,ノ
「 記号,括弧開,*,*,*,*,「,「,「
中居正広のミになる図書館 名詞,固有名詞,一般,*,*,*,中居正広のミになる図書館,ナカイマサヒロノミニナルトショカン,ナカイマサヒロノミ
ニナルトショカン
」 記号,括弧閉,*,*,*,*,」,」,」
( 記号,括弧開,*,*,*,*,(,(,(
テレビ朝日 名詞,固有名詞,組織,*,*,*,テレビ朝日,テレビアサヒ,テレビアサヒ
系 名詞,接尾,一般,*,*,*,系,ケイ,ケイ
) 記号,括弧閉,*,*,*,*,),),)
で 助詞,格助詞,一般,*,*,*,で,デ,デ
、 記号,読点,*,*,*,*,、,、,、
SMAP 名詞,固有名詞,人名,一般,*,*,SMAP,スマップ,スマップ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
中居正広 名詞,固有名詞,人名,一般,*,*,中居正広,ナカイマサヒロ,ナカイマサヒロ
が 助詞,格助詞,一般,*,*,*,が,ガ,ガ
、 記号,読点,*,*,*,*,、,、,、
篠原信一 名詞,固有名詞,人名,一般,*,*,篠原信一,シノハラシンイチ,シノハラシンイチ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
過去 名詞,副詞可能,*,*,*,*,過去,カコ,カコ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
勘違い 名詞,サ変接続,*,*,*,*,勘違い,カンチガイ,カンチガイ
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
明かす 動詞,自立,*,*,五段・サ行,基本形,明かす,アカス,アカス
一幕 名詞,一般,*,*,*,*,一幕,ヒトマク,ヒトマク
が 助詞,格助詞,一般,*,*,*,が,ガ,ガ
あっ 動詞,自立,*,*,五段・ラ行,連用タ接続,ある,アッ,アッ
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。 記号,句点,*,*,*,*,。,。,。
EOS
Dockerfile
FROM alpine:3.4
MAINTAINER nownabe
RUN apk add --update --no-cache build-base
ENV MECAB_VERSION 0.996
ENV IPADIC_VERSION 2.7.0-20070801
ENV mecab_url https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7cENtOXlicTFaRUE
ENV ipadic_url https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7MWVlSDBCSXZMTXM
ENV build_deps 'curl git bash file sudo openssh'
ENV dependencies 'openssl'
RUN apk add --update --no-cache ${build_deps} \
# Install dependencies
&& apk add --update --no-cache ${dependencies} \
# Install MeCab
&& curl -SL -o mecab-${MECAB_VERSION}.tar.gz ${mecab_url} \
&& tar zxf mecab-${MECAB_VERSION}.tar.gz \
&& cd mecab-${MECAB_VERSION} \
&& ./configure --enable-utf8-only --with-charset=utf8 \
&& make \
&& make install \
&& cd \
# Install IPA dic
&& curl -SL -o mecab-ipadic-${IPADIC_VERSION}.tar.gz ${ipadic_url} \
&& tar zxf mecab-ipadic-${IPADIC_VERSION}.tar.gz \
&& cd mecab-ipadic-${IPADIC_VERSION} \
&& ./configure --with-charset=utf8 \
&& make \
&& make install \
&& cd \
# Install Neologd
&& git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git \
&& mecab-ipadic-neologd/bin/install-mecab-ipadic-neologd -n -y \
# Clean up
&& apk del ${build_deps} \
&& rm -rf \
mecab-${MECAB_VERSION}* \
mecab-${IPADIC_VERSION}* \
mecab-ipadic-neologd
CMD ["mecab", "-d", "/usr/local/lib/mecab/dic/mecab-ipadic-neologd"]
Alpine Linux
Alpine Linuxとは
Alpine Linuxは軽量でセキュアなLinuxです。Dockerのイメージを軽くする用途で使われることが増えてるみたいです。
Small. Simple. Secure.
Alpine Linux is a security-oriented, lightweight Linux distribution based on musl libc and busybox.公式ページより
Alpine Linuxのイメージは5MBないぐらいです。
パッケージの探し方
Alpine Linuxではパッケージのインストールにapkというパッケージ管理システムを使います。
Alpineのパッケージに関してはググっても情報なかったりしますが、たいていのパッケージは公式サイトのパッケージ検索システムで探せばあります。
ここにもなかったら普通にビルドすればOKです
また、apk
コマンドをDockerfileで使うとき、--update
と--no-cache
をつけておくのが無難っぽいです。
--update
はパッケージリストの更新をします。なので最初の1回目は必ず--update
を付ける必要があります。
--no-cache
は見ての通りキャッシュを無効化します。なので最後にキャッシュを消したりする処理を書かなくてよくなります。
--virtual
という複数のパッケージをグループにして名前をつける機能もあるのですが、今回は環境変数にパッケージを詰め込んだので使いませんでした。
MeCab
MeCabとは
MeCabは日本語の形態素解析エンジンです。日本語文を単語に分けてくれるやつです
ソースコードの場所
MeCabのソースコードはなんとGoogle Driveにおいてあります。数年に1回ぐらい置き場所が変わってる気がするので注意が必要です。
MeCabの辞書であるIPA辞書も同様です。
NEologd
NEologdとは
NEologdはIPA辞書を強化した辞書です。NE(Named Entity)とあるように、固有表現(固有名詞)に強い辞書です。
新しい単語もどんどん追加されているようです。
non intaractiveなインストール
付属のインストーラを普通に起動すると入力を求められますが、-y
オプションをつけることで回避できます。
mecab-ipadic-neologd/bin/install-mecab-ipadic-neologd -n -y
使い方
使うときは、MeCabに辞書の場所を指定してあげます。
$ mecab
セイバーとライダーとアーチャーの聖杯問答
セイバー 名詞,一般,*,*,*,*,*
と 助詞,並立助詞,*,*,*,*,と,ト,ト
ライダー 名詞,一般,*,*,*,*,ライダー,ライダー,ライダー
と 助詞,並立助詞,*,*,*,*,と,ト,ト
アーチャー 名詞,一般,*,*,*,*,*
の 助詞,連体化,*,*,*,*,の,ノ,ノ
聖 名詞,一般,*,*,*,*,聖,ヒジリ,ヒジリ
杯 名詞,接尾,一般,*,*,*,杯,ハイ,ハイ
問答 名詞,サ変接続,*,*,*,*,問答,モンドウ,モンドー
EOS
^C
$ mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd
セイバーとライダーとアーチャーの聖杯問答
セイバー 名詞,固有名詞,人名,一般,*,*,SAVIORR,セイバー,セイバー
と 助詞,並立助詞,*,*,*,*,と,ト,ト
ライダー 名詞,一般,*,*,*,*,ライダー,ライダー,ライダー
と 助詞,並立助詞,*,*,*,*,と,ト,ト
アーチャー 名詞,固有名詞,一般,*,*,*,アーチャー,アーチャー,アーチャー
の 助詞,連体化,*,*,*,*,の,ノ,ノ
聖杯 名詞,固有名詞,一般,*,*,*,聖杯,セイハイ,セイハイ
問答 名詞,サ変接続,*,*,*,*,問答,モンドウ,モンドー
EOS