■ CEDICT → ZBEDic 変換: 自作 Perl Script(1)



CEDICT は一行テキスト形式の辞書になっていますが、ZBEDicの辞書は一種の「PDICテキスト形式」(一行目に単語、二行目にその意味、といった形式)で、もう少し構造化された形になっています。
辞書の書式についての解説ページがありましたので、それを翻訳(下記)しておきました。

また、CEDICT は GB(簡体字の中国国家標準コード)で書かれていますが、ZBEDic辞書は UTF-8 でエンコードされていなければなりません。ここでは、各種文字コードに対応したとても素晴らしいエディタである xyzzy を使用してGB から UTF-8 への変換等を行いました。

なお、Perl本体は ActivePerl のページから(Windows版、Linux版)ダウンロードして下さい。また、Perlスクリプトを書くに当たっては AOKさん 作の「Perlを始めよう」というソフトが一種の統合開発環境を提供していて、とても効率的に作業ができます。

  「Perlを始めよう」のスクリーンショット

  PERL.PNG - 18,932BYTES

【変換の手順】

  ◆ CEDICT → ZBEDic形式の中英辞書

    1. cedictgb.zip をダウンロードして解凍する。
      cedict.gb(GBの辞書テキストファイル)が出てくる。

    2. perlスクリプト conv-c2zb.pl を上記の辞書ファイルと同じディレクトリ
      にコピーし、スクリプトを実行する。
      Windowsの場合には、コマンドプロンプト上で、上記ディレクトリに移動し
      た後、「perl
conv-c2zb.pl」を実行。

     ユーザーの方から同じ単語で発音の異なる語句(例えば「中」-[zhong1]
      と[zhong4])があった場合、最初の語句しか検索されてこないという指摘
      があり、この点を修正したスクリプト conv-c2zb-v2.pl をアップしました。
      今後はこちらを使って下さい。(2006.1)
      なお、この場合出力されるテキストは cedict-zb-v2.txt になります。

    3. cedict-zb.txt というファイルが生成されるので、これを xyzzy で読み込
      み(文字コードはGBで)、cedict-zb-u8.txt というように名前を付けて
      保存(文字コードは UTF-8 で)する。

    4. cedict-zb-u8.txt を Zaurus に転送し、xerox で圧縮する(辞書名は、
      cedict-zb.dic など)。xerox の使い方や GENE95辞書 の変換例は
こちら
      のページ参照。

        ※xerox は、単に辞書を圧縮するだけではなく辞書インデックスも作っている
     らしい(そうでなければ、こんなに速い検索はできない)。
          ソースは、こちら
       

  ◆ CEDICT → ZBEDic形式の英中辞書

        1. 先ず、CEDICT から一行テキスト形式の英中辞書にコンバートした ECDICT
     (ecdict-ol.txt) を作ります。perlスクリプト
conv-ce2ec.pl

        2. 次に、xyzzy を使い、これを UFT-8 に変換(ecdict-u8-ol.txt)。
       もし最初の数行当たりに「ゴミ」が出ていたら xyzzy 上で削除して下さい。

    3. 更に、ZBEDic形式に変換(ecdict-zb.txt)。
      perlスクリプト
conv-ec-ol2zb.pl

        4. Zaurus に転送し、xerox で圧縮。

   なお、本家 EDICTのページ(モナシュ大学日本語アーカイブ) には EDICT の
    他に、CEDICT、漢字辞書、各種専門用語辞書(英日)、日本国憲法その他若干の
    日本語テキストの英訳など多数掲載されています。


  ■ KJ_dict → ZBEDic 変換: 自作 Perl Script(2)



遂に、フリーの日韓・韓日辞書も発見しました!KJ_dict というFreeWnnをベースとした辞書だ。Vectorのサイトにも公開されている。当面約3.4万語程度の辞書であるが、日常会話程度には役立ちそうだ。早速、これをZBEDic用の辞書に変換して使ってみた。

【変換の手順】

  ◆ KJ_dict → ZBEDic形式の日韓辞書

    1. kj_dict.zip をダウンロードして解凍する。
      dictjk.yml(UTF-8の辞書テキストファイル)と dictkj.yml が出てくる。
      これを、xyzzyに読み込んで、改行コードを「CR+LF」を選択して上書き保存。
      (Windows上の Perl で処理するため改行コードをWindows用に変換する必要)

    2. perlスクリプト jk2ol.pl を上記の辞書ファイルと同じディレクトリにコピ
      ーし、スクリプトを実行する(一行テキスト形式に変換)。dictjk-ol.txt
      ができる。

    3. 更に、cvn-jk2zb.pl を同じディレクトリに置いて実行(ZBEDic形式に変換)。
      dictjk-zb.txt ができる。

    4. Zaurusに転送し、xerox で圧縮。

  ◆ KJ_dict → ZBEDic形式の韓日辞書

    1. 上記と同様、dictkj.yml → dictkj-ol.txt → dictkj-zb.txt と変換し、
      xeroxで圧縮する

      スクリプトは上記と同じものを使用しますが、スクリプト中の「dictjk」
      を全て「dictkj」に書き換えて実行する。

    最近(2004.3.20頃)KJ_dict の書式が変更になりました(v0.2.5→v0.3.1)

   新辞書形式の特徴: @以前のように日韓、韓日に分けてない(KJ_dict.ymlのみ)
             Akey1が韓国語、key2は対応する日本語
             Bword1はkey2に対応する韓国漢字
             Cword2はkey2に対応するカナ

   基本的な辞書の変換方法は上記と同じですが、一行テキスト形式に変換する新しい
   スクリプト kj2ol-v2.pl(韓日の一行テキスト形式に変換)を作りましたので、こ
   ちらを使って下さい(日韓への変換の場合には、スクリプトの key1 と key2 を入
   れ替え、dictkj-ol.txt を dictjk-ol.txt に変更)。cnv-jk2zb.pl は上と同じも
   のを使用できます。

    KJ_dict 最新版(v0.13.2)への対応(05,8/12)

   新辞書形式の特徴:
      key1、key2、word1、word2等のタグの他にpronun(発音)、ex(用例)等の新しい
      タグが作られた。このため、上記 kj2ol-v2.pl で変換すると同じ単語が3重、4重
      に登録されてしまう。なお、このバージョンの単語数は約73000弱です。

   新ヴァージョン用には kj2ol-v3.pl (韓日変換)、 jk2ol-v3.pl (日韓変換)を使って下さ
   い。使い方は上記と同じです。なお、jk2ol-v3.pl では、検索に「ひらがな」のみでの検
   索も可能にするような変更ができます(例えば、「お父さん」でも「おとうさん」でも検索
   できる)。その場合はスクリプト内の説明を見て一部変更して下さい。

    KJ_dict 最新版(v0.16.4)への対応(06,1/3)

   新辞書形式の特徴:
      key1、key2等のタグのの後ろにスペースが付いただけです。これを削除するよう変更。
   新ヴァージョン用には kj2ol-v4.pl (韓日変換)、 jk2ol-v4.pl (日韓変換)を使って下さ
   い。使い方は上記と同じです。

 【スクリーンショット】

 JK.PNG - 5,753BYTES KJ.PNG - 5,892BYTES

 


  ■ bedic辞書の書式(英語原文及び日本語訳)



【英語原文】 (省略。オリジナルの掲載場所はこちら

-----------------

【日本語訳】

bedic辞書のファイルはヘッダとエントリの二つの部分から成っている。辞書ファイルは、文字'\000'で終わる。

T.ヘッダ部分

ヘッダは辞書の属性を示している。ヘッダの全てのデータはUTF-8でエンコードされている。ヘッダ終わりは、文字 \0 で画される。

1.属性

一つの属性定義は次の書式に従う:
 
  name '=' value LF

LFはラインフィード(\012)である。nameとvalueは、両方とも下記に定義されているような 0 と LF を含むことができる。

 \0000 \0033 \0060 (ESC '0')
 \0012 \0033 \0156 (ESC 'n')
 \0033 \0033 \0145 (ESC 'e')

ESCは 033 である。name は文字 '='(075)を含むことができない。

次は、当面定義されている属性である。

 - id   (必須)
   辞書の名称

 - max-entry-length (default 8192)
   辞書エントリの最大長

 - max-word-length (default 50)
   一単語の最大長

 - index
   辞書インデックス 書式は下記に示す。

 - compression-method (default none)
   圧縮方法。  認められる values は 'none' と 'shcm'.

 - shcm-tree  (圧縮方法が shcm なら必須)
   shcm 圧縮アルゴリズムで使用されるデータ

 - search-ignore-chars (default '-.')
    
   この属性で定義される文字は、検索が実行される時に無視される。
    例えば、ユーザーが 'b-all' とタイプすれば、単語 'ball' が検索される。

 - commentXX
   コメント。現在のところ、ライセンス情報に使用される。

他の全ての属性は無視される。

2.index 属性

index 属性があれば辞書検索のスピードが増進する。 index は対になった (word, offset) 集合を含む。 単語は(文字コードと search-ignore-chars で定義された文字を無視して)整列される。 offset は、ファイルのエントリセクションの最初からの相対値。各々の対 (word, offset) は、文字 \000 で画され、 word と offset は、文字 \012 で画される (両文字とも、全ての属性 value と同様、 \033 \0060
と \033 \0156 にエンコードされることに注意)。

U.エントリセクション

エントリセクションは、辞書エントリの集合を含む。各エントリは可変長のサイズである。各エントリは、単語と意味の二つの部分からなる。ある単語は、他の単語と重複してはいけない。全てのエントリは(文字コードと search-ignore-chars で定義された文字を無視して)単語値によって整列させられる。

1. エントリセクションの書式

 <entry0> '\0' <entry1> ... <entryN> '\0'

辞書の各エントリは、文字 \0 によって分離される。

2. 各エントリの書式

 <word> '\012' <meaning>

単語と意味は、文字 \012 (LF) で分離される。

3. Meaning(意味)の書式

単語の意味(meaning)はフリーテキスト書式ではない。 それはいくつかのタグによって定義される構造をもっている。タグの書式は次の通りである。

 '{' タグ名 '}'   開始タグ
 '{' '/' タグ名 '}'   終了タグ
 '{' タグ名 '/' '}'   空のタグ

ある単語は一つあるいはもっと多くの意味(sence)をもつ。ある単語が、異なる品詞の異なる同音異義語か意味をもつ場合には、異なる意味(sence)として定義される。

各々の意味(sence)について、品詞と発音が定義される。

一つの意味(sence)には、一つまたはそれ以上の副意味(sub-sence)が定義される。副意味(sub-sence)タグの中には、単語の訳/定義が置かれる。そこにはまた、辞書の他の単語へのポインター 関連語(_see-also_ )タグ、 用例 (_example_) タグ、あるいは見出し語(_headword_)タグが含まれる。

タグ:

 意味(sense)  {s}
 副意味(sub-sense) {ss}
 品詞(part-of-speech) {ps}
 発音(pronounciation) {pr}
 関連語(see-also) {sa}
 用例(example)  {ex}
 見出し語(headword) {hw/}


例:

単語 test1 の意味

 {s}{ps}n{/ps}{pr}test{/pr}{ss}sub-sense one{/ss}{ss}sub-sense two{/ss}{/s}
 {s}{ps}v{/ps}{pr}test{/pr}{ss}see also {sa}hop{/sa}{/ss}{/s}

は、次のように表示される。

 test1 n /test/

 1. sub-sense one
 2. sub-sense two

 -------------------------------

 test1 v /test/

 see also _hop_

III. SHCM 圧縮

bedic は simple Huffman code を元とした圧縮をサポートしている。この圧縮方法は Alexander Simakov <xander@online.ru>による shcodec program に基づいている。

速い検索を可能にするため、各単語と意味は分離して圧縮される。圧縮されたデータの中の '\0', '\n',  '\033' は、属性値の中それと同様な方法でエンコードされる。

Version: 0.8
Author: Latchesar Ionkov <lucho@ionkov.net>
Last Modified: 06/11/2002