で、辞書アプリを入れたら、ちゃんとした辞書が欲しくなってしまった。
辞書アプリから、辞書を買って動かすまでをまとめる。
最初は辞書アプリとして StarDict を入れてみた。
単語をクリップボードに入れるだけで訳が PopUp する。感激した。これはいい、と。
当たり前かもしれないが、そんな当たり前のことに感激できる自分でいたい(ウザ)
辞書アプリには辞書は付属していない。
StarDictに入れる英和辞書・和英辞書は、アレをこうしてホゲホゲすれば
無料のものが手に入るのだが、やはり無料だけあって語彙が少ないし、訳も危うい。
ということで、ちゃんとしたデジタル辞書が欲しくなって買ってしまった。
買ったのは英辞郎。一番有名だと思う。
数か月ごとにバージョンアップ(訳語が1万語増える)するけど、
バージョンアップしても差分アップデートなど救済方法は無し。買い直せ。
という非常に漢らしい販売スタイルも、逆に気に入った。
英和・和英・例文・略語、全部入って2,000円なので、損した気分ではない。
買った英辞郎を StarDict に入れれば解決、なのだがそんな簡単な話ではなかった。
英辞郎にはテキスト形式とPDIC形式の2種類のデータが入っている。
両方ともそのままでは StarDict で読めない。どうするか。
- テキスト形式を変換して StarDict 形式にする
- PDIC 形式を変換して StarDict 形式にする
ということで、PDIC 形式を扱う辞書アプリの PDIC/Unicode をダウンロードしてインストール。
…これだけで英辞郎が辞書アプリで読めるんだから十分じゃね?ポップアップもあるよ?
いや、あくまで StarDict にこだわってみよう。
PDIC/Unicode を起動して、解凍した英辞郎の PDIC フォルダにある辞書設定ファイルを指定すれば、英辞郎が PDIC/Unicode に登録される。
そして PDIC/Unicode には辞書変換機能があるので(素晴らしい!)、辞書を好きな形に変換出力できる。
さぁ、何形式に変換しようか。
- PDIC1行テキスト形式
- XML 形式
しかし、以下の問題点がある。
- PDIC1行テキスト形式だと、レベルの情報が削除されてしまう
- 発音記号も削除されてしまう
- 発音記号を別辞書として分離⇒再結合して変換する方法もあるが、発音記号と訳の間の区切りが「、」になってしまい、なんか嫌
XML 形式ならすべての情報がそのまま残るし、加工も自由自在だ。
PDIC/Unicode の辞書詳細ウィンドウから変換したい辞書を右クリックして、辞書変換。
変換先のフォルダ・ファイル名と変換形式として XML 形式を選んでOK。これだけ。
変換した xml を xyzzy で開いてみたら、文字コードが utf8n だったので、
文字コードを utf8 に変更した。改行は LF だった。(もしかしたらポイントかも)
以上の操作はすべて Windows でやっている。ここからは ubuntu での作業。
できた xml を ubuntu にもってくる。
xml を StarDict 形式にするには、stardict-tool という便利なパッケージがある。
このツールに食わす形に xml を変換しなければならない。
今回は ruby を使ってみた。
XMLのパーサには REXML を。xml ファイルのサイズが大きいので、stream として扱う。
% apt-get install stardict-tools ruby librexml-ruby"stardict.rb"
#!/usr/bin/ruby -Ku require "rexml/document" require "rexml/streamlistener" include REXML require "cgi" class MyListener include REXML::StreamListener @@items = nil @@buff = "" def output print @@items["word"]+"\t" if (@@items.key?("pron")) print @@items["pron"]+"\\n" end if (@@items.key?("level")) print "[level "+@@items["level"]+"]\\n" end if (@@items.key?("trans")) print @@items["trans"] end print "\n" end def tag_start(tag,attrs) case tag when "record" @@items = Hash.new end end def tag_end(tag) case tag when "record" if (@@items.key?("word")) self.output end when "word" @@items[tag] = @@buff when "trans" @@items[tag] = @@buff when "pron" @@items[tag] = @@buff when "level" @@items[tag] = @@buff end end def text(data) tmp = CGI.unescapeHTML(data) data = tmp.gsub(/\r\n|\r|\n/,"\\n") @@buff = data end end if ARGV.size != 1 print "Usage: stardict [filename]\n" exit 1 end listener = MyListener.new source = File.new ARGV[0] REXML::Document.parse_stream(source, listener)stardict.sh
#!/bin/sh for file in *.xml do DIR=${file%.xml} mkdir $DIR ruby -Ku stardict.rb $file > $DIR/$DIR.txt /usr/lib/stardict-tools/tabfile $DIR/$DIR.txt rm -f $DIR/$DIR.txt done
持ってきた xml ファイルと上記 stardict.rb, stardict.sh を一緒のディレクトリに置き、 stardict.sh を叩けば、辞書ファイル名と同じディレクトリ下に StarDict 形式のファイルが作成される。
ポイントは、改行したい所には "\\n" を付けるということ。
ここにかなりハマった。
生成された ifo ファイルの "sametypesequence=m" を "sametypesequence=h"
に書きかえて html 形式として認識させ、改行の所には<br>を入れるという人もいたが、
どうにもうまくいかなかった。
結局 "\" は "\\" としてエスケープすべしという情報から、"\\n" での改行に落ち着いた。
#この場合に ifo ファイルの変更はなし
上記 ruby スクリプトで、出力形式を決めているのは output のところ。
これは完全に私の趣味。
@@items["word"] の後にタブ "\t" を出せば後は好き勝手にしていいので、自由にアレンジするのがいいだろう。
ruby スクリプトを初めて作ったので、稚拙だったらご勘弁。
これを StarDict の辞書ディレクトリ(Windows なら "C:\Program Files\StarDict\dic\"、ubuntu なら "/usr/share/stardict/dic/")の下に置けば、
あとは自動的に…
なんとここでトラブル。
Windows の StarDict が使えないぐらい頻繁に落ちるようになってしまった。
StarDict のプロジェクトホームページを見ると、開発は止まってしまっているらしい。
ということで、上記のページでも紹介されていて、
StarDictの開発者が引き続き携わっているという GoldenDict を使うことにした。
# ubuntu だと apt-get install goldendict でインストールできる
#当初の StarDict へのこだわりはどこへ行った…
GoldenDict、いいわぁ。
PopUp に癖があるけど、全体的に StarDict より快適。
Wikipedia ビューアーとしても優秀。
http://ja.wikipedia.org/w を登録すれば、日本語 Wikipedia も見える。
そして日本語化もできる。
ここに訳が載ってる ts ファイルを置いてくれた方がいるので、有難く頂戴して、
ubuntu に持って行って下のように変換する。
% sudo apt-get install qt4-dev-tools % lrelease ja_JP.ts -qm ja_JP.qm出来た ja_JP.qm をロケールの場所(Windows なら "C:\Program Files\GoldenDict\locale\"、ubuntu なら "/usr/share/apps/goldendict/locale/")に置くだけ。
あとは設定で日本語を選べば完了。
GoldenDict は辞書ファイルの場所は特に決められてないみたい。
私は Windows は "C:\Program Files\GoldenDict\dictionaries\" なんてフォルダを作って、そこの下に置いた。
ubuntu だと "/usr/share/apps/goldendict/dictionaries/" 。
上記のディレクトリを入力して、再帰(recursive)ボタンを押しておけば、その下のディレクトリを全部検索してくれる。
GoldenDict は StarDict 形式の辞書に対応しているのだが、最初に読み込む場合には stardict-tools では作ってくれなかった idx.oft ファイルを作成したり、どうやら独自のインデックスを作ったりしているので、使えるようになるまで結構時間がかかってしまう。
というわけで、快適な辞書ライフが始まったのであった。
英辞郎ver136をStarDictへ変換するのに参考にさせて頂いています。
返信削除xubuntu14.04 + ruby1.9.1の環境下で試みていますがlibrexml-rubyが手に入らず頓挫しています。
rubyをはじめcoding経験がないため、scriptのどこを修正すれば良いかわからず途方にくれております。librexml-rubyの代替手段をご教示いただければ幸いです。