【Mac】pythonでMeCabが使えるように頑張ったお話
最近は授業のテーマとして自然言語の機械学習をしているのですが,そんな自然言語を扱うに当たって基本であるpythonでMeCabをインストールする作業でめちゃくちゃ時間を取られてしまいました……
因みに出たエラーの種類はこんな感じです.
今回出たエラー
./configure --enable-utf8-only
でerrorを吐く.(Makefileが作成されていない) ←実はgccの問題だった.- mecabが文字化けする(utf8を認識しない.)
…ということで今回はpythonでMeCabを使えるようにするまでに出てきたエラーの対処法をメモしていきます.(また環境構築するかもしれないし…!!)
今回のインストール環境
では早速MeCabのインストールを進めていきたいと思います. 基本的な流れは以下のサイトを参考にしてます.
本当はmecab
をbrewでインストールして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
のコマンドでディレクトリを移動します.
ここで唐突ですが,もし今後pythonでMeCabを使用する予定があるなら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のバージョンを切り替える方法についてはまた別の記事に書いてあるため,必要な場合は以下のリンクから参照してください↓
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 今日 は いい 天気 です ね
……やっとひと段落…!!!.
今回は何故かいろんなエラーでインストールまでに結構手間がかかってしまいましたが,なんとか無事インストールできてホッとしました.何がともあれ良かった良かった.
でもやっぱり環境構築って詰まるとほんと抜け出すまでが大変じゃ………………