みの屋.

プログラムを書いてる時に躓いたことやコードの進捗などをメモでまとめていく予定です.(ついでに日常のつぶやきもちらほらと……)

【Mac】pythonでMeCabが使えるように頑張ったお話

最近は授業のテーマとして自然言語機械学習をしているのですが,そんな自然言語を扱うに当たって基本であるpythonMeCabをインストールする作業でめちゃくちゃ時間を取られてしまいました……

因みに出たエラーの種類はこんな感じです.

今回出たエラー
  • ./configure --enable-utf8-only でerrorを吐く.(Makefileが作成されていない) ←実はgccの問題だった.
  • mecabが文字化けする(utf8を認識しない.)

…ということで今回はpythonMeCabを使えるようにするまでに出てきたエラーの対処法をメモしていきます.(また環境構築するかもしれないし…!!)

今回のインストール環境
  • Mac Sierra 10.12.6
  • Python3(anaconda3-2.5.0)

では早速MeCabのインストールを進めていきたいと思います. 基本的な流れは以下のサイトを参考にしてます.

qiita.com

本当はmecabbrewでインストールしてpipでmecab-python3を入れたかったのですが,
setup.pyが見つからず,またpipのエラーがどうしても直らなかったため,今回はgitから直接cloneする方法をとりました.

MeCabのインストール

ということで,まずはgitからmecabファイルをダウンロードしてきます clone先はどのディレクトリでも大丈夫ですが,後々混乱しないような場所をお勧めします.

$ git clone git@github.com:taku910/mecab.git

cloneができたらmecabというファイルが出来ているので,早速

$ cd medab/mecab

のコマンドでディレクトリを移動します.

ここで唐突ですが,もし今後pythonMeCabを使用する予定があるならmakeする前に以下のファイルを変更する必要があります.(そうで無い方は読み飛ばしてください)

まず,移動した現在のディレクトリ内にpythonというファイルがあるはずなので,その中にあるsetpu.pyというファイルの以下の部分を書き換えます

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

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

これで,pythonでもMeCabを使えるようにする準備が整いました.
後はMeCabのmakeが上手くいけばpythonでも使えるようになるはずです.

では次は実際にダウンロードしてきたMeCabをmakeしていきます.

MeCabをmakeしていく

mecab/mecab/内にディレクトリを移動したら,そこで以下のコマンドを順に実行し,mecabをmakeしていきます.

$ ./configure --with-charset=utf8
$ make
$ make check
$ sudo make install

……今回私は真っ先にこの段階でつまづきました.
(ここまでで何もエラーを吐かれなかった場合はしばらく読み飛ばしてください.)

なんと…最初のコマンドである./configure --with-charset=utf8を実行しても肝心のMakefileが生成されない…!!!(寧ろ途中でエラー起こして止まってる!)

完全に予想外の事態でしたが,コマンド実行時に生成されていたconfig.logにどこでエラーが起きているのかが書いてあり,よく読むとgccの問題であることがわかりました.

そうとわかれば早速gccをgcc5に切り替えていきます.
(gcc5で実行できているサイト様があったためgcc5であれば大丈夫だと考えました.)

gccのバージョンを切り替える方法についてはまた別の記事に書いてあるため,必要な場合は以下のリンクから参照してください↓

Macのgccを変更してみた. - みの屋.

gccの問題も解決し,sudo make install まで完了したらmecabのインストールは完了です!!!

実質エラーさえ吐かなければ4つのコマンドでインストールが完了するなんて簡単……!!!!!!

では次に実際にMeCabがちゃんと動くかどうかをテストしていきます.

MeCabの実行(文字化けした場合の対処)

先ほどインストールは無事完了したので,次はmecabの動作確認をしていきます. ここで入力した文字が形態素解析されていれば成功です…!!!

$ mecab -d /usr/local/lib/mecab/dic/ipadic
今日はいい天気
?   ̾??,????,*,*,*,*,?,???????,???????
?   ????,????,*,*,*,*,*
日 ̾??,??ͭ̾??,?ȿ?,*,*,*,*
はいい   ̾??,????,*,*,*,*,*
天気  ̾??,????,*,*,*,*,*
EOS

…………え?文字化け…………????
一番最初にutf8で指定した…よね………?

……実は私はここでも結構つまづきました.様々なサイト様ではここで記事が成功で終わっている場合が多く,文字化けしている例があまりなくて困りました.

結果的には,文字化けの原因は使用している辞書の文字コードが合っていない場合に起こることが多いことがわかったため,ひとまずmecabで使用している辞書の文字コードを調べてきます.
ちなみに,辞書はmecab/mecab-ipadic/の中に入っています.
(makeコマンドをした階層から一つ戻ったmecab-ipadicというファイル内のことです)

とりあえず文字コードを辞書内の適当なファイルで確認してみると………

$ nkf -g Noun.csv 
EUC-JP

やっぱり文字コードUTF-8じゃない…………!!!
これじゃあ文字化けするのも当然です.

こうなると全ての*.csv,*.defファイルの文字コードUTF-8である確率は低いので,以下のコマンドを入力して一括でファイルの文字コードを強制的に変換します.
(一つ一つ調べると時間かかっちゃうので……)

$ sudo nkf -w --overwrite *.csv
$ sudo nkf -w --overwrite *.def

*.csv,*.defファイルの変換が終わったら,次にdicrcというファイルの中にEUC-JPと記述があるのでこれもUTF-8へ変更します.

# 変更前
config-charset = EUC-JP

# 変更後
config-charset = UTF-8

………これらを全てUTF-8に変更できたことを確認したら,もう一度mecabを起動してみます.
すると………

$ mecab                #辞書の指定をしなくてもちゃんとipadicを読み込んでくれていました.
今日はいい天気
今日  名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
いい  形容詞,自立,*,*,形容詞・イイ,基本形,いい,イイ,イイ
天気  名詞,一般,*,*,*,*,天気,テンキ,テンキ
EOS

やっと文字化けが直ったぁぁぁぁぁぁぁぁぁぁぁ……!!!!!!!!!!!!

(もし,ここで文字化けが直っていなかった場合は一度mecabを消去,再インストールしてmakeする前に文字コードの設定をしてみてください.)

また,今回一番の本題であるpythonから実行も無事上手くいきました!!!!!!

# pythonコード:Mecab.py(入力文を分かち書きしてみるだけのプログラムです)
import MeCab                                                                    
mecab = MeCab.Tagger()                                                          
mecab.parse("")                                                                 
node = mecab.parseToNode("今日はいい天気ですね")                                
while node:                                                                     
    print(node.surface)                                                         
    node = node.next
# 実行結果
$ python Mecab.py

今日
は
いい
天気
です
ね

……やっとひと段落…!!!.
今回は何故かいろんなエラーでインストールまでに結構手間がかかってしまいましたが,なんとか無事インストールできてホッとしました.何がともあれ良かった良かった.
でもやっぱり環境構築って詰まるとほんと抜け出すまでが大変じゃ………………