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

関連する記事

  • 平均的に分類する方法の考察(1)平均的に分類する方法の考察(1) ある定量データが与えられたとき、それを平均的に分類するための方法を考えてみる。 ここで言う平均的に分類するというのは、分類された各グループのデータ数がほぼ等しく、かつ、分類された各グループの平均値が定量データ全体の平均値にほぼ等しくなるように分類するということである。 具体的には、学生のクラス替えを行う際に、100人の学生を3つのクラスに振り分けたいが、その場合、各ク […]
  • UbuntuにRStudioをインストールするための手順UbuntuにRStudioをインストールするための手順 Ubuntuにデスクトップ版のRStudioをインストールするための手順をお伝えする。 まず、Ubuntuが32bitか64bitかを確認するため、端末を起動させ(ショートカットキー:Ctrl+Alt+t)、以下のコマンドを実行する。 i686、i386と表示されれば32bit、x86_64、amd64と表示されれば64bitということである。 $ […]
  • これだけは抑えておきたい成長性分析の基本これだけは抑えておきたい成長性分析の基本 成長性分析とは、様々な観点から成長性・拡大性・発展性を測定する分析である。 規模拡大などの経営戦略がいつも経営者の思い描く通りに進むとは限らないため、様々な観点から自社および自社を取り巻く環境の状況を把握する必要がある。 ここでは、成長性分析の代表的な指標をいくつか紹介する。 売上高伸び率 売上高伸び率とは、前期売上高より当期売上高がどの程度上昇または下降したかを […]
  • R knitrできれいな多重クロス集計をPDFで出力する方法R knitrできれいな多重クロス集計をPDFで出力する方法 knitrパッケージのkable関数を使えば、matrixやdata.frameなどの表形式をきれいに出力してくれるが、ftable関数を用いた多重クロス集計の結果は、kable関数を使うことができない。 これは非常に残念なので、他の方法できれいに出力する方法をお伝えする。ちなみにこの方法ではPDF出力のみの対応となるので注意してほしい。 手順を簡単に説明すると、 […]
  • R データフレームから特定の型の列を抽出する方法R データフレームから特定の型の列を抽出する方法 Rのデータフレームから特定の型の列を抽出する方法をお伝えします。 サンプルデータとして、irisを用います。 データフレームの構造をstr関数で確認します。 > str(iris) 'data.frame': 150 obs. of 5 variables: $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 […]
Ubuntu14.04とPython3でMeCabを使う方法