CaboCha 0.60pre4 Windows版で辞書の文字コードを変えようと思ったのだけどうまくいかなかったときの話 CaboChaをインストールすると、スタートメニューには
- Recompile SHIFT-JIS Model
- Recompile UTF-8 Dictionary というのが用意されているのだけれど、これをこのまま実行してもCaboChaがうまく動作しないことがある。
症状
たとえば、文字コードをUTF-8からSHIFT-JISに変えようと思って「Recompile SHIFT-JIS Model」を実行。特にエラーもなく終了したので、CaboChaを実行すると、
morph.cpp(108) [charset() == decode_charset(dinfo->charset)] Incompatible charse
t: MeCab charset is SHIFT-JIS, Your charset is UTF8
となり係り受け解析ができない。
原因
Windows Vista以降で導入されたユーザーアカウント制御UAC(User Account Control)により、C:\Program Files\CaboCha\model\charset-file.txt
の書き換えに失敗している。
C:\Program Files\CaboCha\model>echo SHIFT-JIS 1>charset-file.txt
アクセスが拒否されました。
対策
Recompileのバッチ実行後に直接C:\Program Files\CaboCha\model\charset-file.txtのファイルを書き換える。 もしくは、 C:\Program Files\CaboCha\model\mkmodel.batの1行目に以下を追加して、”管理者権限で”Recompileのバッチを実行する。
cd /d %~dp0
なぜだろう
UACにより書き込みが制限されるのであれば、最初からバッチコマンド自体を管理者権限で実行すればよいのでは? しかし次のようになってしまう。
C:\Windows\system32>..\bin\cabocha-model-index -f SHIFT-JIS -t SHIFT-JIS dep.ipa
.txt dep.ipa.model
指定されたパスが見つかりません。
C:\Windows\system32>..\bin\cabocha-model-index -f SHIFT-JIS -t SHIFT-JIS chunk.i
pa.txt chunk.ipa.model
指定されたパスが見つかりません。
C:\Windows\system32>..\bin\cabocha-model-index -f SHIFT-JIS -t SHIFT-JIS ne.ipa.
txt ne.ipa.model
指定されたパスが見つかりません。
C:\Windows\system32>echo SHIFT-JIS 1>charset-file.txt
実行ディレクトリが**C:\Windows\system32**
になってしまうのだ。 そこで、バッチの先頭で実行ディレクトリに一旦移動する必要がある。それが上で追加したcd /d %~dp0
だ。
これは他のバッチファイルでもよくハマるので、なんとなく心の片隅に入れとくとよい。
ちなみに毎回管理者として実行するには、 バッチのアイコンを右クリック→プロパティ→ショートカット→詳細設定→管理者として実行にチェック