emacsで英辞郎を使う sdicでらくらく検索

以前に、書籍版の「英辞郎第四版」を購入してはいたのですが、使うたびにアプリを切り替えてというのにストレスを感じていました。どうせならemacsから使えるようにしたいと思い、調べてみたのと、導入手順について記載します。

導入手順
  • 必要なもの
    • Windows (英辞郎をPDIC1行テキスト形式に変換するために必要)
    • nkf, rubyが使える環境。ここではmac (OSX 10.6)を使用

(1) sdicをダウンロードする

$ wget http://www.namazu.org/~tsuchiya/sdic/sdic-2.1.3.tar.gz
$ tar zxvf sdic-2.1.3.tar.gz
$ cd sdic-2.1.3

(2) sdicのコンパイル・インストール

まずはconfigureをします。
Carbon Emacsを使用しているので、下記オプションとなります。
(ここのサイトを参考にしました。)

$ ./configure \
> --with-emacs=/Applications/Emacs.app/Contents/MacOS/Emacs \
> --with-lispdir=/Applications/Emacs.app/Contents/Resources/site-lisp/sdic \
> --with-dicttype=sdic

次にmakeをします。

$ make

ここで、いくつかwarningが出ますが、気にしなくて良いです。
下記Warningの抜粋です。

In sdicf-array-init:
sdicf.el:352:12:Warning: `process-kill-without-query' is an obsolete function
    (as of Emacs 22.1); use `process-query-on-exit-flag' or
    `set-process-query-on-exit-flag'.

…

In toplevel form:
sdic.el:159:5:Warning: reference to free variable `*euc-japan*unix'
sdic.el:360:1:Warning: !! The file uses old-style backquotes !!
This functionality has been obsolete for more than 10 years already
and will be removed soon.  See (elisp)Backquote in the manual.

…

In end of data:
sdic.el:956:1:Warning: the following functions are not known to be defined:
    extent-start-position, extent-end-position, extent-list
Wrote /Users/kafergots/Documents/docs/1117/sdic-2.1.3/lisp/sdic.elc

使っている関数が古いのや、XEmacsのみの拡張関数の定義がないとか言われていますが、Carbon Emacsなので、特に気にしなくてよいでしょう。

さて、makeできたのでインストールします。

$ sudo make install

(3) 英辞郎辞書をPDIC1行テキスト形式で抽出する

この作業は、Windows環境での操作になります。
英辞郎第四版の付属CDで、「PDIC Unicode for EIJIRO IV」をインストールします。
CDを抜く前に一度ソフトを起動させておきましょう。(そうでないと使えないようになっています)

  • インストールしたソフトを起動させて、メニューから、FILE → 辞書設定<詳細> を選択します。
  • 辞書の一覧が表示されるので、Eijiro112.dicを選択して右クリック、辞書の変換を押します。
  • 変換先ファイル形式を「PDIC1行テキスト形式」にし、変換先辞書には保存する場所を指定して、「OK」を押します。
    • 私は、保存ファイル名を「Eijiro112.txt」にしています。好きに決めて問題ないです。
  • 同様に、Ryaku112.dic、Reiji112.dic、Waeiji112.dicも変換します。

変換した4つのファイルを、sdicを使う環境(mac)に持っていきましょう。

(4) sdic辞書形式に変換する

まず、文字コード変換に使うnkfをインストールします。

$ sudo port install nkf

次に、sdic辞書形式に変換するrubyスクリプト2009-01-11さんから、取得します。
ファイル名は、「pdic1line2sdic.rb」にしておきます。
そして、下記コマンドを叩いて、変換をします。

$ cat Waeiji112.txt| nkf -w8| ruby pdic1line2sdic.rb > ~/Documents/docs-archive/dict/waeiji112.sdic
$ cat Eijiro112.txt Ryaku112.txt| nkf -w8| ruby pdic1line2sdic.rb > ~/Documents/docs-archive/dict/eijiro112.sdic

もし、変換先にsudoが必要であれば、rubyコマンドの前にsudoをつけるようにしてください。

(5) emacsの設定

~/.emacs.elに下記を追記します。

;;(setq load-path (cons "/usr/local/share/emacs/site-lisp" load-path)) ;; sdicのインストール先を特に指定していない場合
(autoload 'sdic-describe-word "sdic" "英単語の意味を調べる" t nil)
(global-set-key "\C-cw" 'sdic-describe-word)
(autoload 'sdic-describe-word-at-point "sdic" "カーソルの位置の英単語の意味を調べる" t nil)
(global-set-key "\C-cW" 'sdic-describe-word-at-point)

(setq sdic-eiwa-dictionary-list
      '((sdicf-client "~/Documents/docs-archive/dict/eijiro112.sdic")))
(setq sdic-waei-dictionary-list
      '((sdicf-client "~/Documents/docs-archive/dict/waeiji112.sdic")))
(setq sdic-default-coding-system 'utf-8-unix)

(6) 使い方

Infoか、SDIC Reference Manual - Table of Contentsを見る

キーワード検索以外に、前方、後方一致検索、全文検索もできる。
下記は、マニュアルの抜粋。

  • 検索語を入力する

なお、設定例通りに設定した場合は、C-c w とすれば SDIC が起動されます。

キーワード検索以外の検索を行なうためには、次のように特定の形式に従って検索語を入力して下さい。

`'word''
検索語 word をシングルクオートで囲むと、word に完全一致する単語を検索します。
`word*'
検索語 word の最後にアスタリスクを付け加えると、word に前方一致する単語を検索します。
`*word'
検索語 word の先頭にアスタリスクを付け加えると、word に後方一致する単語を検索します。
`/word'
検索語 word の先頭にスラッシュを付け加えるとを、word をキーとして全文検索を行ないます。