MeCabは各種スクリプト言語(perl、ruby、python、Java)から、各言語バイディングで利用できるようになっている。
しかし、Pythonで用意されているのはPython2系のもので、残念ながらPython3系では使えない。

そこで、ここでは用意されているPython2系バイディングをPython3系に変換して使用する方法をお伝えする。

MeCabのインストール

まずは、MeCabをインストールするため、次のコマンドを実行する。
辞書はIPA(utf-8)を選択した。


$ sudo apt-get install mecab mecab-ipadic-utf8

インストールが完了したら、MeCabのバージョンを確認しておく。


$ mecab -v

mecab of 0.996

swigとlibmecab-devのインストール

MeCabが用意している各言語バイディングはSWINGというプログラムで自動的に生成されているようだ。
そこで、新たにPython3系のバイディングを作成するためにswigをインストールする。
また、Python3系のバイディングを作成するためには「mecab-config」というコマンドを使用しないといけないため、併せてlibmecab-devもインストールする。


# swigのインストール
$ sudo apt-get install swig

# mecab-configコマンドを使用するため
$ sudo apt-get install libmecab-dev

Python3系バイディングの作成

準備が整ったので、ここからはPython3系バイディングの作成に取り掛かる。
まずは、一時的な作業場を用意して、カレントディレクトリを移動しておく。


# 作業用ディレクトリの作成
$ mkdir work
$ cd work

先ほど確認したMeCabのバージョンと同じMeCab本体とmecab-pythonをダウンロードし、解凍する。
MeCab本体をダウンロードする理由は、swigを使う元となるファイルがMeCab本体にしかないためである。
mecab-pythonをダウンロードする理由は、このファイルを用いてPython3系バイディングにするためである。


# mecabのダウンロード
$ wget https://mecab.googlecode.com/files/mecab-0.996.tar.gz
$ tar zxvf mecab-0.996.tar.gz

# mecab-pythonのダウンロード
$ wget https://mecab.googlecode.com/files/mecab-python-0.996.tar.gz
$ tar zxvf mecab-python-0.996.tar.gz

swigを用いてPython用のバイディングの自動生成を行う。
そして、自動生成されたファイルをPython2系バイディングのmecab-python内のファイルに移動する。


$ swig -python -shadow -c++ mecab-0.996/swig/MeCab.i
$ mv mecab-0.996/swig/MeCab.py mecab-python-0.996
$ mv mecab-0.996/swig/MeCab_wrap.cxx mecab-python-0.996

setup.pyの編集

mecab-python-0.996ディレクトリ内のsetup.pyはPython2系の文法で書かれているため、Python3系の文法に直す必要がある。


# setup.pyを編集
$ vim mecab-python-0.996/setup.py

次の箇所を変更し、保存、終了する。


# 変更前
#def cmd2(str):
#    return string.split (cmd1(str))

# 変更後
def cmd2(str):
    return cmd1(str).split()

インストール

ようやく全ての準備が整ったので、インストールを行う。


# インストール
$ cd mecab-python-0.996
$ python3 setup.py build
$ sudo python3 setup.py install

テスト

さて、実際にPython3でMeCabが使えるかテストしてみる。


# テストファイル作成
$ vim mecab-test.py

import MeCab

m = MeCab.Tagger("")
print(m.parse("これはテストです。"))

それでは、このファイルを実行してみる。
次のように表示されれば、成功だ。


# テスト実行
$ python3 mecab-test.py

これ	名詞,代名詞,一般,*,*,*,これ,コレ,コレ
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
テスト	名詞,サ変接続,*,*,*,*,テスト,テスト,テスト
です	助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。	記号,句点,*,*,*,*,。,。,。
EOS

注意

MeCabのバージョン0.996で、この方法によりPython3からMeCabのparseToNode関数を使うと、最初のsurface(表層形)が表示されないというバグがある。
実際に確かめてみるために、次のコードを実行する。


import MeCab

t = MeCab.Tagger("")
n = t.parseToNode("これはテストです。")
while n is not None:
    print(n.surface + '\t' + n.feature)
	n = n.next

すると、次のように表示される。最初のsurface(表層形)の「これ」がないのである。

[bash]
BOS/EOS,*,*,*,*,*,*,*,*
名詞,代名詞,一般,*,*,*,これ,コレ,コレ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
テスト 名詞,サ変接続,*,*,*,*,テスト,テスト,テスト
です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。 記号,句点,*,*,*,*,。,。,。
BOS/EOS,*,*,*,*,*,*,*,*
[/bash]

このバグの最も簡単な回避策は、parseToNode関数を呼び出す前に、一度、parse関数を呼び出すことで回避することができる。
実際に見てみよう。

先ほどのPython3のコードに「t.parse(”)」という一文を追加する。


import MeCab

t = MeCab.Tagger("")
t.parse('')
n = t.parseToNode("これはテストです。")
while n is not None:
    print(n.surface + '\t' + n.feature)
	n = n.next

このPython3のコードを実行すると、次のように表示される。


	BOS/EOS,*,*,*,*,*,*,*,*
これ	名詞,代名詞,一般,*,*,*,これ,コレ,コレ
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
テスト	名詞,サ変接続,*,*,*,*,テスト,テスト,テスト
です	助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。	記号,句点,*,*,*,*,。,。,。
	BOS/EOS,*,*,*,*,*,*,*,*

これで、全てのsurface(表層形)が表示することができた。

アンインストール

テストが無事に成功したら、swigとlibmecab-devは、もう必要ないので削除する。


# 不要なパッケージのアンインストール
$ sudo apt-get remove swig libmecab-dev

ちなみに、MeCab本体とIPA辞書をアンインストールする場合は、apt-getでインストールしたので、次のコマンドを実行すればよい。


$ sudo apt-get remove mecab meacb-ipadic-utf8

また、今回導入したPython3系バイディングをアンインストールする場合は、次の4つのファイルを削除すればよい。


$ sudo rm /usr/local/lib/python3.4/dist-packages/MeCab.py
$ sudo rm /usr/local/lib/python3.4/dist-packages/__pycache__/MeCab.cpython-34.pyc
$ sudo rm /usr/local/lib/python3.4/dist-packages/_MeCab.cpython-34m.so
$ sudo rm /usr/local/lib/python3.4/dist-packages/mecab_python-0.996.egg-info

関連する記事

  • Bioconductor AnnotationDataパッケージ一覧Bioconductor AnnotationDataパッケージ一覧 BioconductorのAnnotationDataパッケージの一覧をご紹介します。英語での説明文をgoogle翻訳を使用させていただき機械的に翻訳したものを掲載しました。パッケージを探す参考にしていただければ幸いです。 パッケージ確認日:2021/07/01 パッケージ数:974 1. GenomeInfoDbData Species and […]
  • RaspberryPi Bluetoothスピーカーとの接続を維持する方法 Bluetoothスピーカーと接続していても、音を出していないとBluetoothスピーカー側がスリープモードに入り、必要な時に音が出ない場合がある。ここでは、Bluetoothスピーカーとの接続が切れないようにする方法をお伝えする。 アイディアはとても簡単で、ある一定時間ごとに無音のサウンドを出力し続けることにより、Bluetoothスピーカーとの接続を維持する。 […]
  • 適切な回答を得るためのアンケートの作り方適切な回答を得るためのアンケートの作り方 アンケートは正しく質問をしないと、適切な回答が得られずにアンケートが持つ情報の価値が半減すると言っても過言ではない。 アンケートを回答しているときの気持ちを思い出して欲しい。おそらく、さっさと終わらせようと思いながら回答用紙に記入しているのではないだろうか。 あなたが質問者の側になったときは、この気持ちを常に念頭に置いて質問を考えよう。 ここでは、質問を作成 […]
  • R knitrできれいな多重クロス集計をPDFで出力する方法R knitrできれいな多重クロス集計をPDFで出力する方法 knitrパッケージのkable関数を使えば、matrixやdata.frameなどの表形式をきれいに出力してくれるが、ftable関数を用いた多重クロス集計の結果は、kable関数を使うことができない。 これは非常に残念なので、他の方法できれいに出力する方法をお伝えする。ちなみにこの方法ではPDF出力のみの対応となるので注意してほしい。 手順を簡単に説明すると、 […]
  • Wikipediaのデータファイルをプレーンテキストに変換するWikipediaのデータファイルをプレーンテキストに変換する Wikipediaのデータファイルをプレーンテキストに変換する方法を備忘記録として記しておく。 Wikipedia日本語版のデータファイルは以下のサイトからダウンロードできる。 ウィキペディア日本語版 Wikipediaのデータファイルをプレーンテキストに変換するPythonプログラム「WikiExtractor」を以下のサイトからダウンロードする。 […]
Ubuntu14.04とPython3でMeCabを使う方法