気の向くままに辿るIT/ICT
ソフトウェア

形態素解析エンジンMeCabとPythonバインディング

ホーム前へ次へ
フリーソフト・オープンソースを活用しよう。

形態素解析エンジンMeCabとPythonバインディング

形態素解析エンジンMeCabとPythonバインディング

2021/11/14

 形態素解析も、MeCabも、よくわからなったものの、これまでにも何度か、お世話になってきたはずな記憶があり、今までミーキャブと読むものと思い込んでいましたが、メカブだということを今日初めて知りました。

 最初に知ったのは、随分前のような気がしていましたが、それもそのはず、初版リリースは、MeCab 0.90で2006年03月26日とのこと。

 MeCabとは、言語・辞書・コーパスに依存しない汎用的な設計を基本としたオープンソースの形態素解析エンジンとして京都大学情報学研究科と日本電信電話株式会社コミュニケーション科学基礎研究所 共同研究ユニットプロジェクトを通じ、奈良先端科学技術大学院大学出身、現GoogleソフトウェアエンジニアでGoogle 日本語入力開発者の一人である工藤拓氏によって開発されている形態素解析器だそうです。

 語源は、同氏の好物『和布蕪』とのこと。

 今回は、Raspberry Pi/Julius/Open JTalkスマートスピーカーをMeCab(形態素解析)で更にパワーアップ...と思ったものの、この使用法は、よく考えたら、自身の思い違いでした。

 と言うか、MeCabに出会っているうちの1回は、Open JTalk用のNAIST日本語辞書open-jtalk-mecab-naist-jdic、リンク先を改めて見るとリポジトリ内のmecab-naist-jdicもapt-cache searchでヒットしてますね。

 が、今後、自身にも必要になるはずですし、ドンピシャがなかったのでDebian GNU/Linuxでソースからインストール、Pythonバインディング含め、動作確認までを記します。

debian~:$ python -V
Python 3.9.2
debian~:$ sudo apt install -y swig
debian~:$ mkdir -p ~/tmp/app
debian~:$ cd tmp/app
debian~:$ git clone https://github.com/taku910/mecab.git
debian~:$ cd mecab/mecab
debian~:$ ./configure --with-charset=utf8
debian~:$ make -j4 && make check
debian~:$ sudo make install
debian~:$ mecab -v
mecab: error while loading shared libraries: libmecab.so.2: cannot open shared object file: No such file or directory
debian~:$ ls /usr/local/lib/libmecab.so.2
/usr/local/lib/libmecab.so.2
debian~:$ mecab-config --libs-only-L | sudo tee /etc/ld.so.conf.d/mecab.conf
/usr/local/lib
debian~:$ sudo ldconfig
debian~:$ mecab -v
mecab of 0.996
debian~:$ cd ../mecab-ipadic
debian~:$ wget 'https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7MWVlSDBCSXZMTXM' -O mecab-ipadic-2.7.0-20070801.tar.gz
debian~:$ tar zxvf mecab-ipadic-2.7.0-20070801.tar.gz
debian~:$ cd mecab-ipadic-2.7.0-20070801
debian~:$ ./configure --with-charset=utf8
debian~:$ make
debian~:$ sudo make install
debian~:$ mecab
もももすももももものうち
もも 名詞,一般,*,*,*,*,もも,モモ,モモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
すもも 名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも 名詞,一般,*,*,*,*,もも,モモ,モモ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
うち 名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
EOS
[Ctrl]+[C]
debian~:$ mkdir -p ~/tmp/app/mecab/mecab-ipadic-neologd
debian~:$ cd ~/tmp/app/mecab/mecab-ipadic-neologd
debian~:$ git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
debian~:$ ./bin/install-mecab-ipadic-neologd -n
...
[install-mecab-ipadic-NEologd] : OK. Let's install mecab-ipadic-NEologd.
[install-mecab-ipadic-NEologd] : Start..
[install-mecab-ipadic-NEologd] : /usr/local/lib/mecab/dic isn't current user's directory
[install-mecab-ipadic-NEologd] : Sudo make install to /usr/local/lib/mecab/dic/mecab-ipadic-neologd
[sudo] xxx のパスワード:
...
[install-mecab-ipadic-NEologd] : Install completed.
[install-mecab-ipadic-NEologd] : When you use MeCab, you can set '/usr/local/lib/mecab/dic/mecab-ipadic-neologd' as a value of '-d' option of MeCab.
[install-mecab-ipadic-NEologd] : Usage of mecab-ipadic-NEologd is here.
Usage:
debian~:$ mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd ...
 
[install-mecab-ipadic-NEologd] : Finish..
[install-mecab-ipadic-NEologd] : Finish..
...
debian~:$ echo `mecab-config --dicdir`"/mecab-ipadic-neologd"
/usr/local/lib/mecab/dic/mecab-ipadic-neologd
debian~:$ ./bin/install-mecab-ipadic-neologd -h
...
debian~:$ mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd
もももすももももものうち
もも 名詞,一般,*,*,*,*,もも,モモ,モモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
すももももも 名詞,固有名詞,一般,*,*,*,すももももも,スモモモモモ,スモモモモモ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
うち 名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
EOS
[Ctrl]+[C]
debian~:$ mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd -Oyomi
JPOP再生して
JPOPサイセイシテ
[Ctrl]+[C]
debian~:$ mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd -Owakati
JPOP再生して
JPOP 再生 し て
[Ctrl]+[C]
debian~:$ mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd -Odump
JPOP再生して
0 BOS BOS/EOS,*,*,*,*,*,*,*,* 0 0 0 0 0 0 2 1 0.000000 0.000000 0.000000 0
7 JPOP 名詞,固有名詞,組織,*,*,*,* 0 4 1292 1292 45 5 1 1 0.000000 0.000000 0.000000 12857
26 再生 名詞,サ変接続,*,*,*,*,再生,サイセイ,サイセイ 4 10 1283 1283 36 2 0 1 0.000000 0.000000 0.000000 16850
40 し 動詞,自立,*,*,サ変・スル,連用形,する,シ,シ 10 13 610 610 31 6 0 1 0.000000 0.000000 0.000000 20218
47 て 助詞,接続助詞,*,*,*,*,て,テ,テ 13 16 307 307 18 6 0 1 0.000000 0.000000 0.000000 18725
49 EOS BOS/EOS,*,*,*,*,*,*,*,* 16 16 0 0 0 0 3 1 0.000000 0.000000 0.000000 18769
 
[Ctrl]+[C]
debian~:$ pip3 install mecab-python3
...
debian~:$ python
Python 3.9.2 (default, Feb 28 2021, 17:03:44)
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import MeCab
>>>
[Ctrl]+[D]
debian~:$ cd ~/work
debian~:$ vi test.py
#!/usr/bin/env python3
 
import MeCab
tagger = MeCab.Tagger("-d /usr/local/lib/mecab/dic/mecab-ipadic-neologd -Odump")
text = "JPOP再生して"
dump = tagger.parse(text)
 
print(dump)
debian~:$ python test.py
0 BOS BOS/EOS,*,*,*,*,*,*,*,* 0 0 0 0 0 0 2 1 0.000000 0.000000 0.000000 0
7 JPOP 名詞,固有名詞,組織,*,*,*,* 0 4 1292 1292 45 5 1 1 0.000000 0.000000 0.000000 12857
26 再生 名詞,サ変接続,*,*,*,*,再生,サイセイ,サイセイ 4 10 1283 1283 36 2 0 1 0.000000 0.000000 0.000000 16850
40 し 動詞,自立,*,*,サ変・スル,連用形,する,シ,シ 10 13 610 610 31 6 0 1 0.000000 0.000000 0.000000 20218
47 て 助詞,接続助詞,*,*,*,*,て,テ,テ 13 16 307 307 18 6 0 1 0.000000 0.000000 0.000000 18725
49 EOS BOS/EOS,*,*,*,*,*,*,*,* 16 16 0 0 0 0 3 1 0.000000 0.000000 0.000000 18769
 
[Ctrl]+[C]
debian~:$

 自身の環境では、g++(Debianではgcc-c++ではない)、wget、curl、patch、file、bzip2含め、ほかは整っていたようでswigのみaptでインストール。

 MeCabとmecab-ipadic-NEologdは、git clone、mecab-ipadicはtarballをダウンロードしてソースからインストール。

 というかmecab-ipadicの補強板で、更新頻度が高いことから語彙数が多く、新語・固有表現も豊富なmecab-ipadic-NEologd(ipadic-NEologdはmecabに限らず利用の多い辞書)は、mecab-ipadicがある前提で?ここにあるようにgit clone後、./bin/install-mecab-ipadic-neologd -nすることで対話的にインストールを完了できました。

 C++はコンパイルに時間がかかるのでMeCab本体のmakeには、-jオプション(最大目安コア・スレッド数の2倍)を付けた方が良いでしょう。

 MeCabのインストール自体は問題なかったものの、バージョン確認しようとしたら参照ライブラリがないエラー、が、確認するとある、そうしたときは、mecab-config...、sudo ldconfigするんだそうな。

 尚、Julius 4.5からはUTF8で統一されたようですが、自身は、当初、今使っているUTF-8完全対応前でShiftJIS、EUC、UTF8混在のJulius 4.4で...と思っていた為、MeCabもmecab-ipadicも--with-charset=utf8のみで他は付与しませんでしたが、通常は、UTF-8完全対応でよいと思われ、MeCabについては、加えて--enable-utf8-onlyオプションを./configure時に指定した方が容量も少なくなり、無難でしょう。

 MeCabの実行は、辞書をインストールしてから、標準のmecab-ipadicは、端末でmecabと入力+[Enter]で入力待ちとなるので自分で任意のフレーズを入力+[Enter]で実行され結果が表示されます。

 MeCabのpythonバインディングは、pip/pip3でmecab-python3をインストール。

 端末でpython/python3を入力+[Enter]、import MeCabと入力+[Enter]してエラーがなければMeCabライブラリのインストールも完了。

 念の為、スクリプトを書いて実行しておくのも良いでしょう。

 今回の導入に際し、参照させて頂いたサイトは、下記の通りです。

ホーム前へ次へ