英辞郎第四版買ってみた。emacsで使いたい。 sdcv編
emacsで使える辞書ツールが他にもあったので紹介します。sdcvというstardictのコマンドラインバージョンでこれをemacsから使うことができます。
ここでは、[id:eiel:20090110]にて作成したpdicの1行形式を利用します。
sdcv
とりあえず、インストールしましょう。debian系だとaptで一発です。
sudo aptitude sdcv stardict-tools stardict
sdcv本体とstardict形式の辞書を作るstardict-toolsをインストールします。
stardictはなくてもいいと思いますが、辞書を配置するディレクトリを作成してくれますので、いれてみました。
stardict形式の辞書ファイルの作成
いろんな形式から変換できるようですが、tab形式というものから変換しようとおもいます。
pdic 1行テキスト形式 → タブ形式 → stardict形式
という流れになります。タブ形式のフォーマットについては
http://stardict.sourceforge.net/HowToCreateDictionary
ここに書いてありました。
一応スクリプトかいときましたので、使いたい方は以下をpdicone2tab.rbみたい名前で保存してどうぞ。*1
#!/usr/bin/ruby -Ku require "kconv" def make_file_list(files, suffix) pattern = "{#{files.join(",")}}" + suffix Dir.glob(pattern) end def pdicone2tab(input,output) input.read.toutf8.each_line do |line| line.sub!("\r\n","\n") line.sub!(" /// ","\t") line.gsub!(/\\(?=[^ ])/, '') line.gsub!(' \\ ','\n') output << line end end files = [ "eijiro", "ryakuji" , "waei" , "reiji" ] suffix = "*.txt" make_file_list(files, suffix).each do |i| File.open(i) do |input| File.open(i.sub(/.txt$/,".tab"),"w") do |output| pdicone2tab(input,output) end end end
バックスラッシュはざっとみた感じだといらないようにみえたので削除しました。
カレントディレクトリのeijiro*.txt,ryakuji*.txt,waei*.txt,reiji*.txtがあれば
.tabに拡張子をかえて出力してくれます
例。以下の状態で。
$ ls eijiro112.txt ryakuji112.txt reiji112.txt pdicone2tab.rb waeiji112.txt
$ ruby pdicone2tab.rb
と実行すれば。
$ ls eijiro112.tab eijiro112.txt ryakuji112.tab ryakuji112.txt reiji112.tab reiji112.txt pdicone2tab.rb waeiji112.tab waeiji112.txt
となるはずです。あとはstardict-toos付属のtabfileを実行します。
$ /usr/lib/stardict-tools/tabfile *.tab
dict.dz,idx,ifoファイルが作成されますので、これを以下のディレクトリに配置します。
/usr/share/stardict/dic $(HOME)/.stardict/dic
/usr/ashare/stardict/dicのであれば
$ sudo cp *.dict.dz *.idx *.ifo /usr/share/stardict/dic/
こんな感じでしょうか。
実際に検索してみるには、
$ sdcv buffer
とすればokです。
ちなみにあいまい検索などもできるようです。詳しくはman sdcvで。
アスタリスクなんかはシェルが解釈してしまうので実際には \*wordみたいな形になりますということを、一応かいときます。
emacs用のインターフェイス
install-elispで手抜きをさせていただきます。
M-x install-elisp http://www.emacswiki.org/cgi-bin/emacs/download/showtip.el M-x install-elisp http://www.emacswiki.org/emacs/download/sdcv.el
ユーザ用のコマンドは
- sdcv-search-input+
- sdcv-search-pointer
- sdcv-search-pointer+
- sdcv-search-simple
あたりだと思います。
適当に.emacsでバインドして使いましょう。
(require 'sdcv) (global-set-key "\C-cw" 'sdcv-search-input) (global-set-key (kbd "H-w") 'sdcv-search-pointer+)
なんとなくハイパーキー+wの例にしてみました。
追記
シェルに丸投げでアスタリスクやらでエスケープがめんどくさいので
--- sdcv.el 2009-03-15 16:10:14.000000000 +0900 +++ sdcv.el~ 2009-03-06 00:03:43.000000000 +0900 @@ -374,7 +374,7 @@ ;; Return translate result. (sdcv-filter (shell-command-to-string - (format "sdcv -n %s \"%s\"" + (format "sdcv -n %s %s" (mapconcat (lambda (dict) (concat "-u " dict)) dictionary-list " ") word))))
と修正した。
*1:辞書ファイルをすべてメモリに読みこむような気がするので低メモリな方は結構時間かかるきがしなくもない。