Hatena::ブログ(Diary)

そんなこと覚えてるわけがない。 このページをアンテナに追加 RSSフィード Twitter

09 01/11

[][]英辞郎第四版買ってみた。emacsで使いたい。 sdic編 22:43 英辞郎第四版買ってみた。emacsで使いたい。 sdic編を含むブックマーク 英辞郎第四版買ってみた。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)

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

f:id:eiel:20090112002730p:image

追記。

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

補足

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

http://pdicviewer.naochan.com/glossary.html

テキスト形式で、見出し語、訳語、用例が1行で表されたファイル。

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


※見出し語部と訳語部の区切りは " /// "(半角スペース + スラッシュ3つ + 半角スペース)

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

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

※見出し語部には改行コードは使えない。

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

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

cavoritecavorite 2009/01/25 20:58 > # key.sub!(/ \+\d+/, '') # これなんの処理だろ?
geneのエントリ

bit +1
(a 〜)少し



<H>bit +1</H><K>bit</K>(a 〜)少し

に変換するためのものなので英辞郎ではいらないですね。

そうですか、sdicで英辞郎が使い物になりますか。
いや、sdic開発が活発に動いていた頃は、SAを使ってさえ実用的じゃなかったので、別な枠組みがいるんじゃないかとか言われていたもので。

あと、英辞郎のフォーマットがその後変わったりとか、元々バグ入りだったりとかで、パッケージに添付の変換スクリプトは刷新される必要があったはずです。

eieleiel 2009/01/26 23:42 コメントありがとうございます。

> <H>bit +1</H><K>bit</K>(a 〜)少し
>
> に変換するためのものなので英辞郎ではいらないですね。

なるほど。
ちょっとgeneの辞書をgrepしてみればわかることなのに気づかないなんてorz

> そうですか、sdicで英辞郎が使い物になりますか。
英和に関しては個人的には十分つかえると思います。全文検索すると単語によっては、4、5秒またされてしまいますけど。
lsdicはインターフェイスがすごく使い安いので、辞書形式のほうをなんとかしてみたいな、とか思ったり思わなかったりです。

yutakayutaka 2009/04/26 00:14 Rubyのコードを参考にさせていただこうと考えています。
動かすと

private method `chomp' called for nil:NilClass (NoMethodError)
from /home/****/pdic1line2sdic.r:14:in `each'
from /home/****/pdic1line2sdic.r:14

と、いうことで動きません。
なにか、理由がありそうですか?
突然の質問で申し訳ございません。
ご回答いただけると助かります。

eieleiel 2009/04/26 09:01 エラーの内容からすると、入力データがpdicの1行形式になっていない可能性が高そうです。

yutakayutaka 2009/04/27 14:57 どうもありがとうございました。
動くようになりました。

yutakayutaka 2010/02/11 23:18 以前、質問させていただいたyutaka です。
英辞郎第五版でもうまくいきました。

ただ、四版からなんですが、
一行形式にして辞書を変換しているのですが、

buffer
緩衝装置, 緩衝の働きをするもの[人], 【コンピュータ】バッファ
buffer
緩衝器 / バッファー
buffer solution
緩衝液
buffer state
中間国
buffer stock
バッファーストック



情報がすくないんですよね。
変換ミスでしょうか??

理由が、よくわからないんですが。。

ご報告まで。

eieleiel 2010/02/12 01:19 指定する辞書ファイルが間違っていませんか?検索結果を見る限り英辞郎のデータじゃないような気がします。

yutakayutaka 2010/02/13 16:22 その通りでした。辞書の選択が間違っていました。恥ずかしいので、前のコメントは消しておいて下さい。
よろしくお願いいたします。

yutakayutaka 2010/02/13 17:17 vine では、できました。

buffer
【1-名-1】緩衝となるもの、緩衝材
【1-名-2】緩衝器、緩衝装置◆動きを緩衝させる、または一時的に蓄える場所。
【1-名-3】《コ》バッファー◆入力データを一時的に蓄えておくメモリー、レジスター。演算処理器の処理がデータの入力速度に間に合わない時に使う。
【1-名-4】バッファー◆真空ポンプの吸気口に設置した冷却フィン。水など蒸気圧が高いガスを吸着する。またポンプ内の高温ガスが排出されないようトラップする。水冷、冷媒冷却などがある。
【1-名-5】緩衝国
【1-名-6】=<→buffering solution>
【1-自動】バッファー[緩衝器・緩衝装置]の役割を果たす
【1-他動-1】(衝撃を)和らげる[減らす]
【1-他動-2】〜をバッファーに格納する、〜をバッファーリングする
【1-他動-3】中和する
・The esophagus also produces bicarbonate ion to buffer the acid. 食道もまた酸を中和するために重炭酸イオンを作り出す。
【2-名】磨き布
・Did you use a buffer to polish it up, or just a towel? それ磨き布で磨いたの、それともただのタオルで?
【@】バッファー、バファー、【変化】《動》buffers | buffering | buffered、【分節】buff・er
buffer action

Meadow はarrayがうまく動いてくれなくて苦戦中です。
ここまでのコメントを決して下さい。
では。
ありがとうございました。

koko 2010/03/19 15:59 >eiel 2009/04/26 09:01
>エラーの内容からすると、入力データがpdicの1行形式になっていない可能性が高そうです。
>yutaka 2009/04/27 14:57
>どうもありがとうございました。
>動くようになりました。
yutaka様
私も同じように英辞郎第5版で同じエラーがでたのですが
まだまだweb上に英辞郎第5版をemacsで使う為の情報が少ないです。
rubyが全く解らないので
どうかemacsで”動くように”する為の方法を具体的にお教えいただくと
大変助かります。

koko 2010/03/19 16:01 >eiel 2009/04/26 09:01
>エラーの内容からすると、入力データがpdicの1行形式になっていない可能性が高そうです。
>yutaka 2009/04/27 14:57
>どうもありがとうございました。
>動くようになりました。
yutaka様
私も同じように英辞郎第5版で同じエラーがでたのですが
まだまだweb上に英辞郎第5版をemacsで使う為の情報が少ないです。
rubyが全く解らないので
どうかemacsで”動くように”する為の方法を具体的にお教えいただくと
大変助かります。

eieleiel 2010/03/19 17:12 エラーの内容が

private method `chomp' called for nil:NilClass (NoMethodError)
from /home/****/pdic1line2sdic.r:14:in `each'
from /home/****/pdic1line2sdic.r:14

であるならば
eijiro112.txtなどの辞書ファイルがPDIC1行形式になっていません。
これを作成するには(第4版では)

PDIC Unicode for EIJIRO IVを立ち上げる.
<ファイル>の<辞書設定<詳細>>で,一覧として出力される辞書を一つ一つ右クリックして,“PDIC 1行テキスト形式”でエクスポートする

とするとPDIC1行テキスト形式を作成することができます。
違うエラーがでるようならば、教えてください。