2017年9月9日土曜日

Python3からMeCabを使う@CentOS7


MeCabをソースからインストールします。
groongaのリポジトリ追加に抵抗がない場合は、そちらでも良いと思います。

今回のざっくりとした環境は下記のとおりです。CentOS7は最小インストールした直後の状態を想定しています。
  • CentOS 7.3
  • Python 3.4
  • mecab 0.996
  • ipadic 2.7.0-20070801

準備

Python3.4を入れるためにEPELのリポジトリを入れます。 あと、gcc-c++が入っていないと、./configureした際に「configure: error: Your compiler is not powerful enough to compile MeCab.」とエラーが出ますので、gcc-c++もインストールしておきます。
yum install epel-release
yum install python34 python34-devel python34-pip
yum install gcc gcc-c++
yum install wget

MeCab本体のインストール

まずは、本体のインストールを行います。ついでに辞書もダウンロードしてきます。configureのオプションでutf-8を入れるのを忘れないようにします。
mkdir download
mkdir src
cd download
wget 'https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7cENtOXlicTFaRUE' -O mecab-0.996.tar.gz
wget 'https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7MWVlSDBCSXZMTXM' -O mecab-ipadic-2.7.0-20070801.tar.gz
cd ~/src
tar xzvf ../download/mecab-0.996.tar.gz
cd mecab-0.996/
./configure --with-charset=utf8
make
make install
辞書を入れる前に実行してみるとエラーが出ます・・・。
mecab
param.cpp(69) [ifs] no such file or directory: /usr/local/lib/mecab/dic/ipadic/dicrc

MeCab辞書のインストール

辞書のconfigureオプションにもutf-8を指定します。
cd ..
tar xvzf ../download/mecab-ipadic-2.7.0-20070801.tar.gz
cd mecab-ipadic-2.7.0-20070801/
./configure --with-charset=utf8
make
sudo make install
とりあえず実行してみて、下記のように分解されればインストールは終了です。
echo "これは、テストです。"|mecab
これ    名詞,代名詞,一般,*,*,*,これ,コレ,コレ
は      助詞,係助詞,*,*,*,*,は,ハ,ワ
、      記号,読点,*,*,*,*,、,、,、
テスト  名詞,サ変接続,*,*,*,*,テスト,テスト,テスト
です    助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。      記号,句点,*,*,*,*,。,。,。
EOS

Pythonバインディングのインストール

次にPython3から呼び出せるように環境を整えていきます。pipでmecab-python3というライブラリを入れます。
pip3 install mecab-python3
ld.so.confを編集して2行目を加えます。
ファイル: /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/local/lib/ # この行を追加
ldconfigで共有ライブラリの依存関係を更新します。
ldconfig
/usr/local/lib/をld.so.confに書く前に実行すると下記のエラーが表示されます。
ImportError: libmecab.so.2: cannot open shared object file: No such file or directory
適当なプログラムを書いてみます。
ファイル: test.py
import MeCab

mecab = MeCab.Tagger("-Ochasen")
print(mecab.parse("これは、テストです。"))
実行して、先ほどと同様の結果が得られれば、成功です。
python3 test.py
これ    コレ    これ    名詞-代名詞-一般
は      ハ      は      助詞-係助詞
、      、      、      記号-読点
テスト  テスト  テスト  名詞-サ変接続
です    デス    です    助動詞  特殊・デス      基本形
。      。      。      記号-句点
EOS
Pythonから呼び出した結果は、Tabでsplitして変数に格納して使うか、-Ochasenを-Owakachiにして空白などで結合して使うことが多いようです。 また、プログラムが古めですので、実際に使うには辞書が不足しているため、辞書を追加したほうがいいです。
echo "クラウド"|mecab
クラ    名詞,固有名詞,一般,*,*,*,クラ,クラ,クラ
ウド    名詞,一般,*,*,*,*,ウド,ウド,ウド
EOS
wikipediaの見出しを使うことが多いみたいです。

mecab-ipadic-NEologdの追加

辞書が古いので、新しい辞書を追加します。gitとpatchが必要になりますので入れておきます。
yum install git patch
mecab-ipadic-neologdをダウンロードしてインストールします。途中で、インストールするか聞かれますので、「yes」と入力してください。辞書は「/usr/local/lib/mecab/dic/mecab-ipadic-neologd」にインストールされます。
cd ~/src
git clone https://github.com/neologd/mecab-ipadic-neologd.git
cd mecab-ipadic-neologd/
./bin/install-mecab-ipadic-neologd -n
#長々とメッセージが流れた後にインストールするか聞かれます。
[install-mecab-ipadic-NEologd] : Do you want to install mecab-ipadic-NEologd? Type yes or no.
yes 
インストールが完了したら、先ほどは認識できなかった「クラウド」という単語が登録されているか確認してみます。
echo "クラウド"|mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd
クラウド        名詞,固有名詞,人名,一般,*,*,CLOUD,クラウド,クラウド
EOS
Pythonから呼び出すときもこのディレクトリを含めて呼び出すことを忘れないようにしてください。
mecab = MeCab.Tagger("-Ochasen -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd")
なお、NEologdのGitHUBのページには正規化の方法が詳しく書いてあり、正規化用のPythonのコードもついていて大変参考になります。なお、この正規化をやったうえで、個人的にさらに気になる点があるとすれば、下記の部分です。
  • 数字と数字の間のカンマの削除(12,345,678とか)
  • カタカナの単位(メートルとか)
  • 100mm以上のミリメートル
  • 漢数字(11兆9000億円→11900000000000円)

0 件のコメント:

コメントを投稿