英辞郎 ver127を Emacsから使う

英辞郎 ver127を購入したので Emacsで使うための設定。


購入方法については http://www.eijiro.jp/get.htmを参照。


自己解凍形式になっているので、Windowsマシンで実行して解凍します。
そして EIJIROフォルダを使いたいマシンに持ってきます。


EIJIROフォルダに入っているテキストファイルを sdic形式にします。
いろいろなサイトに変換スクリプト置いてあったんですけど、ver127では
セパレータの文字が異なっていたので自分で書きました。あとたいてい nkf
一度流して文字コード変換していたのですが、そこも Perlコードに含めました。
元があきらかに PDIC形式ではないんで、変換があっているかは不明です。
それっぽく見えてるって程度なので、参考程度にしてください。


このファイルから sdicファイルを作ります。

  % cat EIJI-127.TXT RYAKU127.TXT|perl ../pdic2sdic.pl > ~/local/dict/eijiro127.sdic
  % perl ../pdic2sdic.pl < WAEI-127.TXT > ~/local/dict/waeiji127.sdic

高速化するために saryを使います。

  % sudo aptitude install sary
  % rehash
  % mksary -c UTF-8 eijiro127.sdic
  % mksary -c UTF-8 waiji127.sdic

1.5GBほどのファイルになりました。最近のマシンの容量からすると
そんなに気にならないでしょう。


これで必要なファイルができましたので、Emacsの設定を行います。
http://blog.2310.net/archives/200を丸写しです。

;; SDIC
(global-set-key "\C-cw" 'sdic-describe-word)
(global-set-key "\C-cW" 'sdic-describe-word-at-point)
(setq sdic-default-coding-system 'utf-8)

(autoload 'sdic-describe-word "sdic" "search word" t nil)

(eval-after-load "sdic"
  '(progn
     (setq sdicf-array-command "/usr/bin/sary") ;; sary command path
     (setq sdic-eiwa-dictionary-list
           '((sdicf-client "/home/syohei/local/dict/eijiro127.sdic"
                           (strategy array))))
     (setq sdic-waei-dictionary-list
           '((sdicf-client "/home/syohei/local/dict/waeiji127.sdic"
             (strategy array))))
     ;; saryを直接使用できるように sdicf.el 内に定義されている
     ;; arrayコマンド用関数を強制的に置換
     (fset 'sdicf-array-init 'sdicf-common-init)
     (fset 'sdicf-array-quit 'sdicf-common-quit)
     (fset 'sdicf-array-search
           (lambda (sdic pattern &optional case regexp)
             (sdicf-array-init sdic)
             (if regexp
                 (signal 'sdicf-invalid-method '(regexp))
               (save-excursion
                 (set-buffer (sdicf-get-buffer sdic))
                 (delete-region (point-min) (point-max))
                 (apply 'sdicf-call-process
                        sdicf-array-command
                        (sdicf-get-coding-system sdic)
                        nil t nil
                        (if case
                            (list "-i" pattern (sdicf-get-filename sdic))
                          (list pattern (sdicf-get-filename sdic))))
                 (goto-char (point-min))
                 (let (entries)
                   (while (not (eobp)) (sdicf-search-internal))
                   (nreverse entries))))))
     ;; omake
     (defadvice sdic-forward-item (after sdic-forward-item-always-top activate)
       (recenter 0))
     (defadvice sdic-backward-item (after sdic-backward-item-always-top activate)
       (recenter 0))))


これで無事に辞書が使えました。
意味が多い単語もちゃんと出てますね。高速化しても、zに近い単語は
遅い。ファイルキャッシュに載れば早くなるので、二回目以降はまあまあ
です。これで翻訳作業が楽に行えそうですね。

emacs_dictionary

追記

和英辞典の方もこのスクリプトでいけたのでその設定を追加しました。
和英辞典を引いた場合は以下のような感じです。てかおっぱい多すぎ。

追記(2011/FEB/5)

和英の表示部分を修正しました。同じ意味の単語は開業して表示するように
修正してます。


送信者 blog