2017年10月13日金曜日

【Python】Windowsでなるべく楽にMeCabをインストールする

花束
α6500 & E 50mm F1.8 OSS SEL50F18

 Pythonで形態素解析をしようと考えたとき、まず最初に選択肢にあがるツールはMeCabだと思います。
 しかしながら、WindowsでMeCabを使うのは、特に64bit版を使うのは意外と準備が面倒。

 というわけで、当初はpipで簡単にインストールできるJanomeを使っていたのですが、小さなデータならともかく大きなデータを扱うには残念ながら処理速度が足りませんでした。
 試しに10MBぐらいのテキストファイルで含まれる名詞の出現数を数える処理をしてみたら(joblibでcorei7論理8コアでの並列処理)、janome(mecab-ipadic-neologd内包版)で3分15秒程度かかりました。GB単位のデータを処理するにはちょっと大変そうです。

 そこで、仕方なく、ネットで検索しながら64bit版MeCab(加えて「mecab-ipadic-NEologd」も)を頑張ってインストールしてみましたので、備忘録として書き残します。先人に感謝。

64bit版MeCabをインストールする

 MeCabの公式サイト(MeCab: Yet Another Part-of-Speech and Morphological Analyzer)では、Windows用の64bit版MeCabは配布されていません。
 知識がある方ならソースコードを元に64bit版を自分で作成できるようですが(知識がなくても先人のものを参考にしながらなら不可能ではなさそうですが)、なるべく楽をしたいので、先人が作成してくださったReleases · ikegami-yukino/mecab · GitHubからMeCabの64bit版をダウンロードしてインストールします。

環境変数を設定する

 環境変数PATHに「\bin」を追加し、環境変数MECABRCに「\etc\mecabrc」を設定します。MECABRCがないとPythonからMeCabを使用する際にエラーが出ます。

Pythonにmecab-pythonを入れる

 一般的に使われる「mecab-python」は、Windowsではそのままpipでインストールとはいきません。ソースをダウンロードしてsetup.pyを書き換えてコンパイラをインストールしてetcの作業が必要になります。
 そこで、先人が作成してくださったWindows用のパッケージであるmecab-python-windows 0.9.9.6 : Python Package Indexを使用させていただいたのですが、前処理をしないとこれもそのままではpipでインストールできませんでした。

  1. Visual C 2015 Build Tools([Download the Visual C Build Tools (standalone C++ compiler, libraries and tools)](http://landinghub.visualstudio.com/visual-cpp-build-tools))のインストール
  2. \sdk」の「C:\Program Files (x86)\MeCab\sdk」へのコピー

の2つの作業が必要になります。この作業をしておくと、コマンドプロンプトから「pip install mecab-python-windows」でインストールできます。

mecab-ipadic-NEologdをインストール

 mecab-ipadic-NEologdは、多数のWeb上の言語資源から得た新語を追加したMeCab用の辞書です。本やマンガのタイトルなど固有名詞を分割させないようにするには必須。
 これをインストールするには「Bash on Ubuntu on Windows」を使います。
 まず、「Bash on Ubuntu on Windowsをインストールしてみよう! - Qiita」などを参考にして、「Bash on Ubuntu on Windows」を導入します。
 次に「mecab-ipadic-neologd/README.ja.md at master · neologd/mecab-ipadic-neologd · GitHub」の「Windows 10 バージョン 1607 以降の場合」の項のとおりに「mecab-ipadic-NEologd」をインストールします。
 インストールした際に、git cloneしたディレクトリ配下に「build\mecab-ipadic-2.7.0-20070801-neologd-日付」というディレクトリができます。この中にmecab-ipadic-NEologdの辞書が入っています。
 最後に「\ipadic」の中身を上記ディレクトリの中身と入れ替えれば完成。
 なお、入れ替えなくても-dオプションで辞書を指定すれば使えますが(例:tagger = MeCab.Tagger(r"-Owakati -d C:\src\mecab-ipadic-neologd\build\mecab-ipadic-2.7.0-20070801-neologd-20171009"))、そのたびに指定するのも面倒なので、私は標準辞書のディレクトリ名をipadic_oldと変更して残した上で入れ替えちゃってます。

おまけ:JanomeとMeCabの速度差

 冒頭で述べた約10MBのテキストファイルに含まれる名詞の出現数を数える処理(joblibでcorei7論理8コアでの並列処理)ですが、Janomeで3分15秒ぐらいかかっていたものが、MeCabで同等の作業をしたら2~3秒で終了!
 スピード差は10倍どころか少なくとも50倍以上はありそうです。

0 件のコメント: