SKKIME 辞書更新の自動化

SKKIMEで使うため辞書は、 SKK辞書 - FreeStyleWiki にて配布されています。

その中で私が現在使っているのは、

  • L辞書 - SKK-JISYO.L
  • 人名辞書 - SKK-JISYO.jinmei
  • 地名辞書 - SKK-JISYO.geo
  • 英和辞書 - SKK-JISYO.edict

ですが、L辞書と人名辞書は結構更新が頻繁です。

この記事を書いているのは、2009年4月11日ですが、

  • L辞書は2009年4月4日
  • 人名辞書は2009年3月21日

となっていますので、更新したいところです。

wceSKKSERVをSKKサーバとして使っているWIndows XP環境で、PCを起動するたびに辞書を更新するためのバッチファイル(.bat)を書いてみました。

準備

必要なソフト

下記をインストールします。

wecSKKSERVのインストールについては、wceSKKSERVの導入・SKKIMEから利用 | 君のてのひらからもご参照ください。 私が作成したバッチファイルでは、wceSKKSERVのインデックスファイルの作り先は、辞書を置いてあるフォルダとは別になっている前提です。

下準備

環境変数の設定でGNUWIN32の実行ファイルがインストールされるフォルダをPATHに追加しておくと、後がラクです。 [コントロールパネル] → [システム] → [詳細設定] → [環境変数] で「システム環境変数」PATHを編集してください。 wget for WIndowsのインストール先がデフォルトであれば、「C:Program FilesGnuWin32bin」を追加です。

ディレクトリ構成

  • バッチファイルの配置先 D:bat
  • SKK辞書の配置先 C:Appsskkimedic
  • wceSKKSERVのインデックス作成先 C:Appsskkimedicindex
  • wceSKKSERVのインストール先 C:AppswceSKKSERV

上記構成の前提です。

バッチファイル作成

各辞書ファイル(SKK-JISYO.*)に対し、

  1. 「old_」をファイル名の頭に付けて移動(wget失敗したときのバックアップ)
  2. wgetでOpenLabから辞書ファイルをダウンロード

を繰り返し実行します。 Linuxなどシェルスクリプトであれば、for do~doneで処理を回せるのですが、バッチファイルでは一つのコマンドしか実施できないようでした。 しかたないので繰り返し部分を司るバッチファイル(skk_dictionary_download.bat)も作成しています。 2ファイルは同じディレクトリ(D:bat)に置いてください。

skk_dictionary_update.bat

@echo off
rem skk_dictionary_update.bat
rem -------------------------
rem by Takuya Y. 
rem 
rem 必要なもの:
rem   wceSKKSERV http://megadriver.yi.org/~fumi/wceskkserv/
rem   wget (GnuWin32) http://gnuwin32.sourceforge.net/packages/wget.htm

set BATDIR=D:bat
set WCESKKSERV=C:AppswceSKKSERVwceSKKSERV.exe
set SKKDICDIR=C:Appsskkimedic
set ERRORLOG=D:batskk_dictionary_update_error.log

rem SKK-JISYOファイルをダウンロード
cd %BATDIR%
for /f "usebackq" %%D in (`dir /B %SKKDICDIR%SKK-JISYO.*`) do cmd /c %BATDIR%skk_dictionary_download.bat %%D

rem wceSKKSERVを起動
set ERRMSG="wceSKKSERV not started"
start %WCESKKSERV%
IF ERRORLEVEL 1 GOTO ERROR

:END
exit 0

:ERROR
echo %ERRMSG% > %ERRORLOG%
exit 1

skk_dictionary_download.bat

@echo off
rem skk_dictionary_download.bat
rem -------------------------
rem by Takuya Y. 
rem 
rem 必要なもの:
rem   wceSKKSERV http://megadriver.yi.org/~fumi/wceskkserv/
rem   wget (GnuWin32) http://gnuwin32.sourceforge.net/packages/wget.htm

set ERRORLOG="D:batskk_dictionary_update_error.log"
set SKKDICDIR="C:Appsskkimedic"

rem ディレクトリ移動
cd %SKKDICDIR%

rem oldファイル削除
del old_%1

rem /// 辞書ファイルをrename
set ERRMSG="rename error."
rename %1 old_%1
IF ERRORLEVEL 1 GOTO ERROR

rem /// 辞書ファイルをwget
set ERRMSG="wget error."

wget http://openlab.jp/skk/skk/dic/%1
IF ERRORLEVEL 1 GOTO ERROR ELSE GOTO END


:END
exit 0

:ERROR
echo %ERRMSG% > %ERRORLOG%
rename old_%1 %1

exit 1

skk_dictionary_update.batのショートカットを「スタートアップ」に配置しておいてください。 自分のユーザ環境にログインするたびに実行されます。

改善案

wceSKKSERV をkill → 辞書アップデート → wceSKKSERV起動 としたいのですが、taskkillがWindows XP HOME Editionには付いてこないということなので、とりあえずあきらめました。GnuWin32でkillコマンドが使えるのであれば、それで実戦しようかな。