Wnn+mule/jvimで7桁郵便番号を変換する

要約

郵政省が提供している7桁郵便番号のCSVファイルをWnn4.2 (jserver) の辞書に変換し, mule, jvimなどWnnのクライアントで郵便番号変換できるようにする.

Linux 2.x (Slackware 3.x + JE 0.9) を前提にしてますが, まあだいたいのUNIXで同様にできるでしょう.

いるもの

  • perl (4.039以降なら大丈夫でしょう. jperlじゃないほうがいいと思う. なんとなく.)
  • nkf (バージョン1.5以降, -Zとか-Xオプションがあるやつ. nkf -v で確認してね.)

7桁郵便番号のデータは, 郵政省のダウンロードサービスから持ってこれます. 全国一括データ(ken_all.lzh)を取ってきてください. なんらかのLHA系解凍手段も必要でしょう.
あとはhttps://bitbucket.org/mrmt/wnn7zip/srcにあるMakefileとcsv2dic

インストール

  • 必要なら, Makefile の設定を変更します. NKF, WNNBINDIR, WNNDICDIR の変更が必要な環境があるかもしれません.
  • perlが/usr/bin/perlじゃない場合は, csv2dic の1行め(shell bang)も直してください.
  • 郵政省からとってきたken_all.lzhを解凍し, 得られたken_all.csvをこのMakefile, csv2dicと同じディレクトリに置きます.
  • makeする.
  • スーパユーザになってmake installする.
  • /usr/local/lib/wnn/ja_JP/jserverrcを編集します.
  • readfile zip/7zip1.dic
    readfile zip/7zip2.dic
    readfile zip/7zip3.dic
    を追加.
  • /usr/local/bin/Wnn4/wnnkillでjserverを殺す. あるいは, 誰かがnemacs/muleを使ってようがお構いなしにjserverをkillする
  • make touchする
  • jserverを起動. 以下のように郵便番号辞書が読み込まれていればok.
    Nihongo Multi Client Server (4.20)
    Reading /usr/local/lib/wnn/ja_JP/dic/pubdic/kihon.dic Fid = 1
    Reading /usr/local/lib/wnn/ja_JP/dic/pubdic/setsuji.dic Fid = 2
    Reading /usr/local/lib/wnn/ja_JP/dic/pubdic/jinmei.dic Fid = 3
    Reading /usr/local/lib/wnn/ja_JP/dic/pubdic/chimei.dic Fid = 4
    Reading /usr/local/lib/wnn/ja_JP/dic/pubdic/koyuu.dic Fid = 5
    Reading /usr/local/lib/wnn/ja_JP/dic/pubdic/special.dic Fid = 6
    Reading /usr/local/lib/wnn/ja_JP/dic/pubdic/computer.dic Fid = 7
    Reading /usr/local/lib/wnn/ja_JP/dic/pubdic/bio.dic Fid = 8
    Reading /usr/local/lib/wnn/ja_JP/dic/pubdic/symbol.dic Fid = 9
    Reading /usr/local/lib/wnn/ja_JP/dic/pubdic/tankan.dic Fid = 10
    Reading /usr/local/lib/wnn/ja_JP/dic/gerodic/g-jinmei.dic Fid = 11
    Reading /usr/local/lib/wnn/ja_JP/dic/wnncons/tankan2.dic Fid = 12
    Reading /usr/local/lib/wnn/ja_JP/dic/wnncons/tankan3.dic Fid = 13
    Reading /usr/local/lib/wnn/ja_JP/dic/zip/7zip1.dic Fid = 14
    Reading /usr/local/lib/wnn/ja_JP/dic/zip/7zip2.dic Fid = 15
    Reading /usr/local/lib/wnn/ja_JP/dic/zip/7zip3.dic Fid = 16
    Reading /usr/local/lib/wnn/ja_JP/dic/misc/supplement.dic Fid = 17
    Finished Reading Files
    can't bind inet socketとか文句いわれたら, まだjserverが生き残っていないか, /tmp/jd_sockV4が残っていないかをチェックする.

mule の設定

emacs 19.28ベースのmule 2.3を例に取ると, /usr/local/lib/mule/19.28/lisp/eggrc-wnnの適切な場所に (wnn4-jserver-setupdefunしている中とか) 以下を追加. mule 再起動.

(add-wnn-dict "zip/7zip1.dic" (concat wnn-usr-dic-dir "/7zip1.h") 2 nil t)
(add-wnn-dict "zip/7zip2.dic" (concat wnn-usr-dic-dir "/7zip2.h") 2 nil t)
(add-wnn-dict "zip/7zip3.dic" (concat wnn-usr-dic-dir "/7zip3.h") 2 nil t)

バグ

141-0001を変換して東京都北品川(5, 6丁目)が出てくるのはいかにも頭がわるすぎる. csv2dicでちょびっとパーズして辞書エントリをナニしてやろう.

でも, ちゃんとやろうとすると, 「以下に掲載がない場合」なんてのもあって面倒だよ.

ぼくは現状のままでとりあえずいいや.