日本語を形態素解析するときに使う定番ソフトと言えばMeCabです。
大量の文章を分析する機会があったので、WindowsにMeCabを入れて使おうとしたところ意外に大変でした。
MeCabはUnix系へのインストールを前提としているようで、ネットで調べてもWindowsにインストールした人は多くなかったため結構躓きました。引っかかりやすいポイントも含めてまとめておきます。ご活用ください。
やったことをざっくりとまとめるとこれらです。
- MeCab Windows 64bit版をインストール
- 環境変数を設定する
- 辞書をダウンロードして設定
- (おまけ)Pythonにもmecabをインストール
各項目の詳細はこの後に。おまけはPythonをインストール済みの前提で書きますので、まだインストールしていない方は入れてください。
MeCab Windows 64bit版をインストール
ダウンロード先(https://github.com/ikegami-yukino/mecab/releases)
mecab-64-0.996.2.exeをダウンロードしてインストールします。
公式サイトにあるMeCabは32bit用なので、64bitで使うにはソースの修正やビルドをしなければならないとのこと。
歴史のあるソフトですから、64bit版のOSは一般的ではなかったのかもしれません。わざわざ64bit版に設定したものを作ってくれた方がいらっしゃるのでありがたく頂戴します。
インストール時に選ぶ辞書の文字コードはUTF-8にしました。
辞書コードのデフォルトはShift-JISですが、Pythonから使うにはUTF-8の方がいいと思います。
逆にWindowsのプロンプトだけからMeCabを使う場合、プロンプトはShift-JIS以外だと文字化けしてしまうので、Shift-JISのままでいいかもしれません。
環境変数を設定する
環境変数はwindowsのシステム>システムの詳細設定から変更できます。
PathにMeCabのbinを追加します。
変数名は[Path]ですが大半のユーザーは既にあると思うので、Pathの[編集]から[新規作成]してください。値は[C:\Program Files\MeCab\bin]です。
値はMeCabのインストール先で多少変わるので自分の環境に合わせて下さい。MeCabのbinを指定してあげればOKです。
次にMECABRCの環境変数を新規作成します。mecabrcはデフォルト辞書やユーザー辞書の設定ファイルの場所です。
変数名は[MECABRC]、値は[C:\Program Files\MeCab\etc\mecabrc]です。
Pathと同様インストール先で値が少々変わりますが、MeCabのetcフォルダにあるmecabrcを指定すればOKです。
ユーザー環境変数とシステム環境変数どちらに追加するか迷いましたが、私の場合は両方ともシステム環境変数に入れました。MeCabを使うログインユーザーを制限したい場合は、ユーザー環境変数に入れることになるかと思います。
ちなみに環境変数の仕様では同名の変数名があった場合、ユーザー環境変数が優先され、システム環境変数が次に使われるそうです。知らなかった……。
Unidic辞書をインストールする
辞書に単語がないと上手く文章の分割が出来ません。固有名詞は新しいものがどんどん生まれるのでデータが更新されている辞書を使うことを推奨します。
辞書にはipadic、Unidicなどがありますが、ipadicは更新が止まっている模様……。ということで今回はUnidecを使います。話し言葉のフルバージョンにしましたが、用途によって変えてください。容量が2GB近くあるので注意が必要です。
ダウンロード先(https://clrd.ninjal.ac.jp/unidic/)
ダウンロードした辞書は解凍してMeCabのdicフォルダに入れます。同フォルダにデフォルト辞書のipadicフォルダもあるので間違えることはないと思います。
がっかり…デフォルトで使う辞書が変更できない
MeCabのデフォルトで使う辞書は、環境変数で設定したmecabrcファイルから変更できる……はずなのですが、何回操作しても出来ませんでした。
mecabrcファイルの中身はデフォルトで下のようになってます。
;
; Configuration file of MeCab
;
; $Id: mecabrc.in,v 1.3 2006/05/29 15:36:08 taku-ku Exp $;
;
dicdir = $(rcpath)\..\dic\ipadic
; userdic = /home/foo/bar/user.dic
; output-format-type = wakati
; input-buffer-size = 8192
; node-format = %m\n
; bos-format = %S\n
; eos-format = EOS\n
dicdirがデフォルトで使う辞書のディレクトリです。現在はipadicですね。
今使っている辞書が何かはコンソールからmecab -Dと打つと見ることができます。先ほど格納したUnidicのディレクトリを指定したのですが、ipadicのままでした。
Pathの書き方がWindows用ではなかったので環境変数の箇所を%~%で囲ってもダメ。絶対パスで指定してもダメ。困りました。
Python側でデフォルト辞書を変更できるか調べましたが、WindowsのMeCab側でしか設定できないようです。仕方ないのでMeCabを使うたびに毎回Unidicを指定してあげています。Windowsでデフォルトの変更の仕方をご存じの方がいれば情報をください……。
プロンプトから毎回辞書を指定してMeCabを動かすなら、下のコマンドで出来ます。動けばとりあえずMeCabが使えることは分かります。
辞書をUTF-8にしている場合、プロンプトでは取り扱えない文字コードなので文字化けした結果が返ってきますが正常です。これでWindowsからMeCabを使うことが出来るようになりました。
echo "[解析したい文字列]" | mecab -d "[使いたい辞書のディレクトリ]"
(おまけ)PythonにもMeCabをインストール
MeCabをPythonでも使いたいので、Pythoneライブラリのmecab-python3をインストールします。
実はPythonからmecabを使うだけなら前述の64bit版インストールなどもいらないのですが、Windowsのコンソールからmecabを使うことはできないのでその方法は取りませんでした。(そもそもWindowsにインストールすることが今回の目的なので……。)
プロンプトから下のように打ちます。
pip install mecab-python3
管理者権限を持っていないユーザーだと、ファイルの書き込み権限がないと怒られるかもしれません。その場合は–userをオプションを追加して、管理者権限が必要ない箇所にインストールします。
pip install mecab-python3 --user
mecab-python3だけでは辞書データがありません。辞書もインストールします。この作業はWindows側にMeCabをインストールしている場合は不要です。
pip install ipadic
unidicを利用する場合は、unidicのインストールに加えて、辞書自体をダウンロードする必要があるそうです。私はWindowsでMeCabをインストールしたため、こちらは未実施ですので参考までに。
参考:https://tech.nkhn37.net/python-mecab-morphological-analysis/
PythonからMeCabを操作してみる
PythonでMeCabを使う準備は整ったので使ってみます。プロンプトでPythonを呼んでから下のコマンドを打ってみましょう。
Taggerを作成して辞書のフォルダを指定をしますが、ダブルクォートの中をシングルクォートでさらに囲んであげる点に注意です。シングルで囲まないとProgram Filesの半角スペースでパスが切れてしまいエラーになります。
Linuxユーザーであれば当たり前なのかもしれませんが、私は慣れていないので躓いてしまいました。
>>> import MeCab
>>> mecab = MeCab.Tagger("-d 'C:/Program Files/MeCab/dic/unidic-cwj-202302_full'")
>>> result = mecab.parse("この文章をunidicで解析します。")
>>> print(result)
この 連体詞,*,*,*,*,*,コノ,此の,この,コノ,この,コノ,和,*,*,*,*,*,*,相,コノ,コノ,コノ,コノ,0,*,*,3547308012741120,12905
文章 名詞,普通名詞,一般,*,*,*,ブンショウ,文章,文章,ブンショー,文章,ブンショー,漢,*,*,*,*,*,*,体,ブンショウ,ブンショウ,ブンショウ,ブンショウ,1,C1,*,9234806785319424,33596
を 助詞,格助詞,*,*,*,*,ヲ,を,を,オ,を,オ,和,*,*,*,*,*,*,格助,ヲ,ヲ,ヲ,ヲ,*,"動詞%F2@0,名詞%F1,形容詞%F2@-1",*,11381878116459008,41407
unidic 名詞,普通名詞,一般,*,*,*
で 助詞,格助詞,*,*,*,*,デ,で,で,デ,で,デ,和,*,*,*,*,*,*,格助,デ,デ,デ,デ,*,"動詞%F2@0,名詞%F1",*,7014343053025792,25518
解析 名詞,普通名詞,サ変可能,*,*,*,カイセキ,解析,解析,カイセキ,解析,カイセキ,漢,*,*,*,*,*,*,体,カイセキ,カイセキ,カイセキ,カイセキ,0,C2,*,1590177315299840,5785
し 動詞,非自立可能,*,*,サ行変格,連用形-一般,スル,為る,し,シ,する,スル,和,*,*,*,*,*,*,用,シ,スル,シ,スル,0,C5,*,5370298291593857,19537
ます 助動詞,*,*,*,助動詞-マス,終止形-一般,マス,ます,ます,マス,ます,マス,和,*,*,*,*,*,*,助動,マス,マス,マス,マス,*,動詞%F4@1,*,9812325267808939,35697
。 補助記号,句点,*,*,*,*,*,。,。,*,。,*,記号,*,*,*,*,*,*,補助,*,*,*,*,*,*,*,6880571302400,25
>>> dic_path = mecab.dictionary_info().filename
>>> print("使用中のシステム辞書は : " , dic_path )
使用中のシステム辞書は : C:/Program Files/MeCab/dic/unidic-cwj-202302_full\sys.dic
形態素解析が出来ました。辞書も指定通りUnidicを使えています。
Taggerから辞書を指定しなければならないのは不満ですが、指定はTaggerのインスタンスごとなのでそれほど手間ではないはずです。
コメント