はじめに
これは個人的な思いなんですが、
いろんなソフトウェアを使うときにレジストリに設定が書き込まれて云々という、
インストーラー形式の導入方法はポータビリティが失われるので苦手です。
おそらく似たような思いを抱いている人もいると思うので、
今回はMeCabをローカルにインストールする方法を記載します。
(毎度のことながらもっといい方法あったら教えて下さい)
実現方法
Windows 10 64bitの環境でやっています。
MeCab のダウンロード
まずは普通にMeCabのインストーラをダウンロードします → ダウンロード
Universal Extractor のダウンロード
様々なアーカイブを展開できる、Universal Extractorをダウンロードします。
Universal Extractor Download Archive
私はインストーラーが嫌いなので(←)、「uniextract161_noinst.rar」をダウンロードしました。
ダウンロードしたrarファイルを展開すればスタンドアロンで起動する Universal Extractor が起動できます。
本家からフォークした「UniExtract2」というOSSもあるみたいですが、こちらは試していません。
MeCab の展開
先程ダウンロードした uniextract を使用して、
MeCabのインストーラを展開します。
上記のように、入力と宛先を指定して展開すると、
上記フォルダのように展開されます。
install_script.iss
をテキストエディタなどで参照すると、
インストーラがどういったことをやっているのかが大体わかって面白いです。
特に、89行目以降の
[Registry]
Root: HKLM; Subkey: "software\MeCab"; ValueName: "mecabrc"; ValueType: String; ValueData: "{app}\etc\mecabrc"; Check: "IsAdmin"; Flags: uninsdeletekey
Root: HKCU; Subkey: "software\MeCab"; ValueName: "mecabrc"; ValueType: String; ValueData: "{app}\etc\mecabrc"; Flags: uninsdeletekey
は mecabrc
(mecabの設定ファイル)の場所をレジストリに登録しているのでしょうか。興味深いですね。
MeCab のコピー
展開したフォルダ内の {app}
フォルダの中身をお好みの場所にコピーします。
私はWinPythonというものを使用しているので、WinPython展開フォルダの t/MeCab
にコピーしました。
今後、{installDir}
は {app}
の中身をコピーした場所として説明をしていきます。適宜読み替えてください。
辞書の作成
次に、install_script.iss
にある、
Filename: "{app}\bin\mecab-dict-index.exe"; Parameters: "-f SHIFT-JIS -t {code:GetCharCode}"; WorkingDir: "{app}\dic\ipadic";
と同様の内容をやっていきます。
しかし、その前に
Source: "{app}\bin\libmecab,2.dll"; DestDir: "{app}\bin"; DestName: "libmecab.dll";
の内容もやる必要があるので、
{installDir}\bin\libmecab,2.dll
の名前を {installDir}\bin\libmecab.dll
にリネームします。
そしてコマンドを以下の通り実行します。
cd {installDir}\dic\ipadic
set PATH=%PATH%;%CD%\..\..\bin
mecab-dict-index -f SHIFT-JIS -t UTF-8
すると、{installDir}\dic\ipadic
フォルダに
- matrix.bin
- sys.dic
- char.bin
- unk.dic
の4ファイルが生成されると思います。
(コマンド内の「UTF-8」は環境に応じて変更してください。コマンドプロンプトで使う場合は「SHIFT-JIS」がよいと思います。)
この状況で mecab
コマンドを実行すると
param.cpp(69) [ifs] no such file or directory: c:\Program Files\mecab\etc\mecabrc
というエラーが出ると思います。
これは、mecabrc
(mecabの設定ファイル)を読み込む先として、デフォルトでは「c:\Program Files\mecab\etc\mecabrc」が設定されていることに起因します。
MECABRC の設定
ソースコードを読むと、
mecabrcの場所については環境変数 MECABRC
を見ていることがわかりますので、 該当箇所
set MECABRC={installDir}\etc\mecabrc
とすることで参照先を変更することができます。
(%HOME%\.mecabrc
を読むようにもなっていますので、そちらに {installDir}\etc\mecabrc
の内容をコピーしてもよいでしょう。)
実行してみる
PATH
と MECABRC
が設定されている状態であれば、mecab
コマンドを使用することができます。
以上で、導入完了になります。
オマケ(WINPYTHON環境で自動で使えるようにする)
導入は完了したわけなんですが、いちいち PATH
と MECABRC
を設定するのも面倒なので、
WinPythonを立ち上げたときに自動で設定が行われるようにします。
(ほとんど、JuliaをWinPythonに導入するのと同じやり方です → 過去記事 )
起動時の環境変数設定
{winPython}/settings/winpython.ini
ファイルを編集し、
[environment]に PATH
と MECABRC
の行を追加します。
[environment]
PATH=%PATH%;%WINPYDIR%\..\t\MeCab\bin
MECABRC=%WINPYDIR%\..\t\MeCab\etc\mecabrc
私は、{winPython}\t\MeCab\
に MeCab をコピーしたので、上記のような設定になりました。
WinPython Command Promptで使う
コマンドプロンプトで使えるようになります(結果は割愛)。
Jupyter Lab で使う
JupyterLab でも当然使うことができます。
いいぞ。
おわりに
「はじめに」にも書きましたが、私はインストーラー形式がすごく苦手です。
というより、WinPythonで色々使用できるように構築しておくと、
コピペでそのまま環境を移動できるようになるなど、非常に便利ですので、おすすめです。
dockerなどで開発環境が一発で整う昨今に、
「フォルダのコピペで環境が複製できる」というポータビリティの確保の仕方もどうかとは思いますがw