2011/06/28

GoldenDict 1.0.1-1 で英辞郎 Ver.192 を使う

何気なく辞書アプリを入れてみた。そしたらいいのね。最近のてくのろじぃはすごいね。
で、辞書アプリを入れたら、ちゃんとした辞書が欲しくなってしまった。
辞書アプリから、辞書を買って動かすまでをまとめる。

最初は辞書アプリとして StarDict を入れてみた。
単語をクリップボードに入れるだけで訳が PopUp する。感激した。これはいい、と。
当たり前かもしれないが、そんな当たり前のことに感激できる自分でいたい(ウザ)

辞書アプリには辞書は付属していない。
StarDictに入れる英和辞書・和英辞書は、アレをこうしてホゲホゲすれば
無料のものが手に入るのだが、やはり無料だけあって語彙が少ないし、訳も危うい。
ということで、ちゃんとしたデジタル辞書が欲しくなって買ってしまった。

買ったのは英辞郎。一番有名だと思う。
数か月ごとにバージョンアップ(訳語が1万語増える)するけど、
バージョンアップしても差分アップデートなど救済方法は無し。買い直せ。
という非常に漢らしい販売スタイルも、逆に気に入った。
英和・和英・例文・略語、全部入って2,000円なので、損した気分ではない。

買った英辞郎を StarDict に入れれば解決、なのだがそんな簡単な話ではなかった。

英辞郎にはテキスト形式とPDIC形式の2種類のデータが入っている。
両方ともそのままでは StarDict で読めない。どうするか。
  1. テキスト形式を変換して StarDict 形式にする
  2. PDIC 形式を変換して StarDict 形式にする
なんとなく後者にしてみた。
ということで、PDIC 形式を扱う辞書アプリの PDIC/Unicode をダウンロードしてインストール。

…これだけで英辞郎が辞書アプリで読めるんだから十分じゃね?ポップアップもあるよ?

いや、あくまで StarDict にこだわってみよう。
PDIC/Unicode を起動して、解凍した英辞郎の PDIC フォルダにある辞書設定ファイルを指定すれば、英辞郎が PDIC/Unicode に登録される。
そして PDIC/Unicode には辞書変換機能があるので(素晴らしい!)、辞書を好きな形に変換出力できる。
さぁ、何形式に変換しようか。
  1. PDIC1行テキスト形式
  2. XML 形式
ググると前者の方法でやっているものがほとんどだ。
しかし、以下の問題点がある。
  1. PDIC1行テキスト形式だと、レベルの情報が削除されてしまう
  2. 発音記号も削除されてしまう
  3. 発音記号を別辞書として分離⇒再結合して変換する方法もあるが、発音記号と訳の間の区切りが「、」になってしまい、なんか嫌
ということで、XML 形式にする。
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 ファイルを作成したり、どうやら独自のインデックスを作ったりしているので、使えるようになるまで結構時間がかかってしまう。

というわけで、快適な辞書ライフが始まったのであった。

1 件のコメント:

  1. 英辞郎ver136をStarDictへ変換するのに参考にさせて頂いています。
    xubuntu14.04 + ruby1.9.1の環境下で試みていますがlibrexml-rubyが手に入らず頓挫しています。
    rubyをはじめcoding経験がないため、scriptのどこを修正すれば良いかわからず途方にくれております。librexml-rubyの代替手段をご教示いただければ幸いです。

    返信削除