英辞郎第四版買ってみた。emacsで使いたい。 sdic編

[id:eiel:20090110]のつづき。

テキスト形式にしてしまえばこっちのものです。
とはいえ、sdicについてくるeijirou.perlで変換すればいいというわけにもいかないです。*1というわけで、rubyでかいてみた。gene.perlを参考にした。

#!/usr/bin/ruby -Ku

def make_key(key)
  head = key.clone
  key.tr!('A-Z', 'a-z')
  key.sub!(/\s+/, ' ')
#  key.sub!(/ \+\d+/, '')        # これなんの処理だろ?
  ret = "" 
  if head != key
    ret = "<H>#{head}</H>"
  end
  ret + "<K>#{key}</K>"
end

$stdin.each do |line|
  line.gsub!('&', '&amp;')
  line.gsub!('<', '&lt;')
  line.gsub!('>', '&gt;')
  line.gsub!(' \ ', '&lf;  ')
  key, content  = line.split(' /// ')
  puts make_key(key) + content.chomp
end

あとはこれを使ってsdic形式に変換します。
上記の内容をpdic1line2sdic.rbという名前で保存してて、辞書ファイルの名前がeijiro112.txtみたいな感じにしているならば。以下の感じでインストール。適宜修正してください。
出力先は/usr/shar/dictにしてます。

sudo sh -c "cat eijiro112.txt ryakuji112.txt| nkf -w8| ruby pdic1line2sdic.rb > /usr/share/dict//eijiro112.sdic"
sudo sh -c "cat waeiji112.txt | nkf -w8| ruby pdic1line2sdic.rb > /usr/share/dict//waeiji112.sdic"

あとは.emacsに設定。なにを思ったかutf-8を採用したので余計な設定があります。
debianでsdicをインストール済の場合以下の感じ。Ubuntuでも大丈夫かと。

(global-set-key "\C-cw" 'sdic-describe-word)
(global-set-key "\C-cW" 'sdic-describe-word-at-point)
(setq sdic-eiwa-dictionary-list
      '((sdicf-client "/usr/share/dict/eijiro112.sdic")))
(setq sdic-waei-dictionary-list
      '((sdicf-client "/usr/share/dict/waeiji112.sdic"
		      (add-keys-to-headword t))))
(setq sdic-default-coding-system 'utf-8-unix)

使用してる様子はこんな感じ

追記。
和英がこのままだとぐだぐだな予感。そのうち調査しよう。

補足

pdic1行テキスト形式のフォーマット

http://pdicviewer.naochan.com/glossary.html
テキスト形式で、見出し語、訳語、用例が1行で表されたファイル。

見出し語 /// 訳語 / 用例


※見出し語部と訳語部の区切りは " /// "(半角スペース + スラッシュ3つ + 半角スペース)
※訳語部と用例部の区切りはPDICテキスト形式と同様 " / "(半角スペース + スラッシュ1つ + 半角スペース)

※訳語部、用例部には改行コードを含めることができる。改行コードは " \ "(半角スペース + 円マーク + 半角スペース)
※見出し語部には改行コードは使えない。

sdic形式についてはinfo参照とかかいてごまかしておく。

*1:ダメなことはないけど、つかってみるとつかいづらいので