はじめに
PythonでMeCabを利用した形態素解析をする際、OS側にインストールされているMeCabの形態素解析エンジンや辞書との関係で少し混乱したため、忘れない様に学んだことをメモしておく。
前提条件
【PC環境】
Windows 10 Pro
【ローカル環境のpython.Ver】
Python 3.9.13
【仮想環境のpython.Ver】
Python 3.9.13
仮想環境を作成することはマストではないが、一旦テストが終わったら丸っと削除するつもりなので、今回は仮想環境で作業している。
メモ内容
1.OS側のMeCabとPython側のMeCabについて
2.OS側にMeCabを入れずにPythonでMeCabを利用する
3.PythonでMeCabを利用できる状態の時に、OS側にMeCabを入れてみる。
1.OS側のMeCabとPython側のMeCabについて
MeCabを使った形態素解析をする場合、まずは以下の32bit版 or 64bit版のインストーラをダウンロードすることが多いと思うが、PythonでMeCabの形態素解析をするのに実は必須ではない。
・WindowsにMeCabのダウンロード
32bit版:MeCabの公式サイトからダウンロードする
64bit版:有志がビルドしたもの。こちらのサイトからダウンロード。
上記でインストールしたMeCabは OS側のMeCab となり、この中には "形態素解析エンジン(mecab.exe等)" と "辞書データ(sys.dic)" が含まれる。
そのため、環境変数の設定をちゃんとすると、コマンドプロンプトからでもMeCabの形態素解析エンジンを利用できる。
メリットとしては、OS側にエンジンも辞書もあるため、他のインタフェースからも利用しやすいという事、このOS側の辞書を再構築したりができる事、などがあるかのかと思っている。(あくまでも、私個人が感じたメリットだが。。。)
一方、OS側にMeCabをインストールせず、PythonのみのパッケージでMeCabを使った形態素解析もできる。
しかし、辞書の再構築やユーザー定義辞書の作成については難易度が高そう・・・(そもそも可能なのかも不明)
2.OS側にMeCabを入れずにPythonでMeCabを利用する
まず、python環境内で以下のライブラリをインストールする。
pip install mecab-python3
試しにjupyter notebook
などで以下のコードを実行してみる。
import MeCab
mecab = MeCab.Tagger()
print(mecab.parse("私はYahooプレミアム会員になりました。"))
すると、恐らく結果はエラーになるはず。
それはそのはずで、実はmecab-python3
の中には形態素解析エンジンしか含まれておらず、肝心の辞書データがないためである。
そのため、OS側にMeCabを入れていない場合、別途辞書データを用意する必要がある。
以下を実行して、辞書データのパッケージをインストールする。
pip install ipadic
再度 jupyter notebook
などで以下のコードを実行してみる。
import MeCab
import ipadic
mecab = MeCab.Tagger(ipadic.MECAB_ARGS) # インストールした辞書を指定
print(mecab.parse("私はYahooプレミアム会員になりました。"))
ちゃんとインストールがされていれば、上記コマンドは実行できるはずとなり、OS側にMeCab本体をインストールしていなくてもPythonで形態素解析ができる様になる。
※ただし、この辞書データの再構築やユーザー定義辞書の作り方については、可否を含め確認できてはいない。
3.PythonでMeCabを利用できる状態の時に、OS側にMeCabを入れてみる。
PythonのパッケージのみでもMeCabを動かせることは確認できたので、この状態でOS側に64bit版のMeCabをインストールしてみる。文字コードはUTF-8
に設定し、インストール先は適当な場所に変更。
上記インストールが完了した状態で、一番初めに試したコードを再度jupyter notebook
で実行してみる。
import MeCab
mecab = MeCab.Tagger()
print(mecab.parse("私はYahooプレミアム会員になりました。"))
すると、これはなぜか成功する。
MeCab.Tagger()
の引数に何も値がない場合、デフォルトの辞書(OS側のMeCab)を参照しているのは間違いなさそうなのだが、どうやって辞書までのパスを取得しているのかは正直よく分かっていない。
(環境変数のPath設定前で、かつ任意のフォルダにインストールしているのにも関わらず、ちゃんとデフォルト辞書 [OS側MeCabのipadic] を参照できていそうなので、インストール処理の中で、MeCab共通のデフォルト辞書のパス変数が作られると一旦は理解した。)