LoginSignup
37

More than 3 years have passed since last update.

CentOS/UbuntuにMeCab(とipadicとneologdとpythonのmecabモジュール)を丁寧にインストールする。

Last updated at Posted at 2019-03-26

はじめに

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の確認

確認用スクリプトを作成

sample-mecab.py
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

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
37