はじめに
MeCabは各種パッケージマネージャでも提供されていますが、PythonやGoなど各言語のバインディング利用時にライブラリのリンクエラーなど発生しがちです。
Mecab本体や関連辞書をソースコードから適宜オプションを指定してインストールすることにより、どんなファイルを何処にインストールしたかが明確になり、リンクライブラリの指定エラーなどに対して適切に対応できるようになります。
作業方針
・UTF-8対応として本体、辞書共にソースコードから設定(configure)およびビルドします。
・MeCab本体は「/opt/mecab」以下にインストールします。
・標準辞書のipadicは「/opt/mecab/lib/mecab/dic/ipadic」にインストールします。
・拡張辞書のNeologdは「/opt/mecab/lib/mecab/dic/neologd」にインストールします。
CentOS7.6で確認していますが、Debian系でもBuildに必要なパッケージ名を多少読み替えれば同じ手順でインストールできます。手元のUbuntu18.04では追加パッケージなしで、このページの方法のままインストールできました。(逐一調べていませんが、普通のgcc環境が入っていればbuild関連のパッケージ追加は必要なさそうです。)
次のサイトなどを参考にしています。
https://omohikane.com/centos7_mecab_neologd/
http://next49.hatenadiary.jp/entry/20120215/p1
https://qiita.com/sogawa@github/items/fd9bdaf8df27335f9a65
環境
次の環境で作業しています。
# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
# python -V
Python 3.6.2
MeCabをインストール
インストール先は
/opt/mecab
とします。
# 関連ライブラリのインストール
sudo yum install -y bzip2 bzip2-devel gcc gcc-c++ git make wget curl openssl-devel readline-devel zlib-devel patch file
# 作業フォルダを作成して移動
mkdir -p ~/source/mecab
cd ~/source/mecab
# ソースをダウンロードして解凍して移動
wget 'https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7cENtOXlicTFaRUE' -O mecab-0.996.tar.gz
tar zxvf mecab-0.996.tar.gz
cd mecab-0.996
# インストール先フォルダを作成
sudo mkdir -p /opt/mecab
# configure(コンパイルのための設定)を実行し、コンパイルしてインストール
./configure --prefix=/opt/mecab --with-charset=utf8 --enable-utf8-only
make
sudo make install
インストールしたmecabの実行ファイル(のあるフォルダ)をパスに追加する。
# fish shellの場合
echo "set -x PATH /opt/mecab/bin \$PATH" >> ~/.config/fish/config.fish
source ~/.config/fish/config.fish
# bashの場合
echo "export PATH=/opt/mecab/bin:\$PATH" >> ~/.bashrc
source ~/.bashrc
インストールしたmecabのライブラリにリンクを張る。
2020/03/19 コマンドを更新(参考:https://qiita.com/sogawa@github/items/fd9bdaf8df27335f9a65 )
# sudo bash -c "echo \"/opt/mecab/lib\" > /etc/ld.so.conf.d/libmecab.conf"
mecab-config --libs-only-L | sudo tee /etc/ld.so.conf.d/mecab.conf
sudo ldconfig
ipadic(標準辞書)をインストールする
MeCabのインストール先に準じて、
/opt/mecab/lib/mecab/dic/ipadic/
にインストールされます
# 作業フォルダを作成して移動
mkdir ~/source/mecab-ipadic
cd ~/source/mecab-ipadic
# 辞書ファイルを取得して解凍して移動
wget 'https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7MWVlSDBCSXZMTXM' -O mecab-ipadic-2.7.0-20070801.tar.gz
tar zxvf mecab-ipadic-2.7.0-20070801.tar.gz
cd mecab-ipadic-2.7.0-20070801
# 設定してmakeしてインストール
./configure --with-mecab-config=/opt/mecab/bin/mecab-config --with-charset=utf8
make
sudo make install
ipadicの確認
# 次のコマンドを入力
mecab -d /opt/mecab/lib/mecab/dic/ipadic
# コマンド入力後、何も表示されないですがそのまま次の文章を入力
# "ff14の大会に参加したい"
# 次のように出力されれば成功
ff 名詞,一般,*,*,*,*,*
14 名詞,数,*,*,*,*,*
の 助詞,連体化,*,*,*,*,の,ノ,ノ
大会 名詞,一般,*,*,*,*,大会,タイカイ,タイカイ
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
参加 名詞,サ変接続,*,*,*,*,参加,サンカ,サンカ
し 動詞,自立,*,*,サ変・スル,連用形,する,シ,シ
たい 助動詞,*,*,*,特殊・タイ,基本形,たい,タイ,タイ
EOS
Neologd(拡張辞書)をインストール
次のパスへインストールします。
/opt/mecab/lib/mecab/dic/neologd
# 作業フォルダに移動してファイルを取得
cd ~/source
git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
# 設定とともにインストールを実行
./mecab-ipadic-neologd/bin/install-mecab-ipadic-neologd -n -y -p /opt/mecab/lib/mecab/dic/neologd
次のエラーが出た場合はyumでpatchやfileをインストール
[install-mecab-ipadic-NEologd] : patch is not found.
-> sudo yum install patch
[install-mecab-ipadic-NEologd] : file is not found.
-> sudo yum install file
Neologdの確認
# 次のコマンドを入力
mecab -d /opt/mecab/lib/mecab/dic/neologd
# コマンド入力後、何も表示されないですがそのままipadicと同じ文章を入力
# "ff14の大会に参加したい"
# 次のように出力されれば成功
ff14 名詞,固有名詞,一般,*,*,*,FF14,エフエフジュウヨン,エフエフジュウヨン
の 助詞,連体化,*,*,*,*,の,ノ,ノ
大会 名詞,一般,*,*,*,*,大会,タイカイ,タイカイ
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
参加 名詞,サ変接続,*,*,*,*,参加,サンカ,サンカ
し 動詞,自立,*,*,サ変・スル,連用形,する,シ,シ
たい 助動詞,*,*,*,特殊・タイ,基本形,たい,タイ,タイ
EOS
# ゲームの「ff14」が固有名詞になっています。
# その他「ぴこ太郎」「東京五輪」などでも違いがでるようです。
mecab-pythonをインストール
次のコマンドでインストール
pip install mecab-python3
次のエラーが発生した場合、Mecabのインストール先をパスに追加する処理に失敗している可能性があります。
Collecting mecab-python3
Using cached https://files.pythonhosted.org/packages/ac/48/295efe525df40cbc2173748eb869290e81a57e835bc41f6d3834fc5dad5f/mecab-python3-0.996.1.tar.gz
Complete output from command python setup.py egg_info:
/bin/sh: mecab-config: command not found
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/tmp/pip-build-kdsplcnj/mecab-python3/setup.py", line 29, in <module>
inc_dir = mecab_config("--inc-dir")
File "/tmp/pip-build-kdsplcnj/mecab-python3/setup.py", line 27, in mecab_config
return os.popen("mecab-config " + arg).readlines()[0].split()
IndexError: list index out of range
----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-kdsplcnj/mecab-python3/
次のエラーが発生した場合、swigをインストールしてください。
running install
running build
running build_py
running build_ext
building '_MeCab' extension
swigging MeCab.i to MeCab_wrap.cpp
swig -python -shadow -c++ -I/opt/mecab/include -o MeCab_wrap.cpp MeCab.i
unable to execute 'swig': No such file or directory
error: command 'swig' failed with exit status 1
swigのインストール
sudo yum install swig
mecab-pythonの確認
確認用スクリプトを作成
import MeCab
tagger = MeCab.Tagger("-d /opt/mecab/lib/mecab/dic/ipadic -Owakati")
text = "これはMeCab+Neologdの実験です。"
wakati = tagger.parse(text)
print(wakati)
実行結果
python mecab-test.py
# 次のように出力されれば成功
これ は MeCab + Neologd の 実験 です 。
以上で作業は終了です。
もしimportの部分で次のエラーが発生したら、前出のライブラリのリンクに失敗している可能性があります。
Traceback (most recent call last):
File "./sample-mecab.py", line 1, in <module>
import MeCab
File "/home/dev-user/.pyenv/versions/api-env-3.6.2/lib/python3.6/site-packages/MeCab.py", line 26, in <module>
_MeCab = swig_import_helper()
File "/home/dev-user/.pyenv/versions/api-env-3.6.2/lib/python3.6/site-packages/MeCab.py", line 22, in swig_import_helper
_mod = imp.load_module('_MeCab', fp, pathname, description)
File "/home/dev-user/.pyenv/versions/3.6.2/lib/python3.6/imp.py", line 242, in load_module
return load_dynamic(name, filename, file)
File "/home/dev-user/.pyenv/versions/3.6.2/lib/python3.6/imp.py", line 342, in load_dynamic
return _load(spec)
ImportError: libmecab.so.2: cannot open shared object file: No such file or directory