はじめに
前回、Juliaで形態素解析を行う方法を紹介しましたが、その方法では、SageMaker Studio Lab上では形態素解析が使えません。SageMaker Studio LabはUbuntu上で動いているのですが、そもそも前回紹介した方法でMeCabをインストールする際に使用した「sudo」が使えないのです。
そこで、今回は、SageMaker Studio Lab上でMeCabをインストールする方法、および、Awabiの呼び出し方を紹介します。
MeCabのインストール
Linux上でMeCabをインストールする場合は、Sudoを使ってすべてのユーザに使用できるフォルダにインストールするのですが、そもそもSageMaker Studio Labの場合は、ユーザは自分ひとりなので、特権ユーザになる必要性がありません。任意のフォルダにインストールして、そのパスがわかっていれば使うことができるわけです。
次の記事を参考にしてインストールをしてみます。
この記事は、Awabi作者が「pyawabi」をSageMaker Studio Labで使う際に使用した設定です。この最初のセルをPythonのランタイムで実行するとMeCabがインストールされます。実際には、シェルを呼び出して実行しているだけなので、SageMaker Studio Lab上ではTerminalを起動してLinuxコマンドとして実行すれば同じことができます。実行すべきコマンドを記しておきます。
MECAB_ROOT="${HOME}/mecab"
mkdir -p ${MECAB_ROOT}
mkdir -p ~/source
cd ~/source
git clone https://github.com/taku910/mecab.git
cd mecab/mecab
./configure --prefix=${MECAB_ROOT} --enable-utf8-only
make
make install
cd ../mecab-ipadic
./configure --with-mecab-config=${MECAB_ROOT}/bin/mecab-config --with-charset=utf8
make
make install
途中でWarningのメッセージが出る場合があるかもしれませんが、基本的に無視して実行していけばインストールできます。
なお、インストール後の、「mecabrc」のパスは「/home/studio-lab-user/mecab/etc/mecabrc」、辞書のフォルダは、「/home/studio-lab-user/mecab/lib/mecab/dic/ipadic」になります。
使い方
mecabrcのパスを指定する例を次に示します。mecabrcにはユーザ辞書のパスなども記述しておくことで、それをMeCabが参照して形態素解析をすることができます。(ただし、ユーザ辞書の設定やmecabrcへの記載などは、自分自身で行う必要があります。)
julia> using Awabi
julia> rcfile = "/home/studio-lab-user/mecab/etc/mecabrc"
"/home/studio-lab-user/mecab/etc/mecabrc"
julia> tokenize(Tokenizer(rcfile), "すもももももももものうち")
7-element Vector{Tuple{String, String}}:
("すもも", "名詞,一般,*,*,*,*,すもも,スモモ,スモモ")
("も", "助詞,係助詞,*,*,*,*,も,モ,モ")
("もも", "名詞,一般,*,*,*,*,もも,モモ,モモ")
("も", "助詞,係助詞,*,*,*,*,も,モ,モ")
("もも", "名詞,一般,*,*,*,*,もも,モモ,モモ")
("の", "助詞,連体化,*,*,*,*,の,ノ,ノ")
("うち", "名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ")
MeCabの辞書が格納されているフォルダを指定する方法を次に示します。基本的には、前回のWindowsの場合と同じ方法で、辞書フォルダのパスが違っているだけです。
julia> using Awabi
julia> dic = Dict("dicdir" => "/home/studio-lab-user/mecab/lib/mecab/dic/ipadic")
Dict{String, String} with 1 entry:
"dicdir" => "/home/studio-lab-user/mecab/lib/mecab/dic/ipadic"
julia> tokenize(Tokenizer(dic), "すもももももももものうち")
7-element Vector{Tuple{String, String}}:
("すもも", "名詞,一般,*,*,*,*,すもも,スモモ,スモモ")
("も", "助詞,係助詞,*,*,*,*,も,モ,モ")
("もも", "名詞,一般,*,*,*,*,もも,モモ,モモ")
("も", "助詞,係助詞,*,*,*,*,も,モ,モ")
("もも", "名詞,一般,*,*,*,*,もも,モモ,モモ")
("の", "助詞,連体化,*,*,*,*,の,ノ,ノ")
("うち", "名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ")
コメント