英和翻訳フィルタ

WebDictのロゴマーク

WebDict Ver1.16

Copyright (C) 1997 Mikkun. All rights reserved.


ようこそ いらっしゃいませ 番目の訪問です(1998/01/19〜)。

最終更新日: 1999/01/16


目次戻る
  1.ご紹介
  2.堅いこと
  3.プログラム
  4.辞書ファイル
  5.語尾変化辞書
  6.辞書のインポート
  7.改版履歴
  8.未解決のバグ
  9.今後の予定
  10.終わりに
  11.参考文献



1.ご紹介トップへ
 英和翻訳フィルタ WebDict は、CGI あるいは DeleGate 等と連携し、 指定された英語の URL ページを日本語に翻訳するためのフィルタです。 翻訳といっても単語または熟語を日本語に置き換えるという単純なものです。
 WebDict の構成は図のようになります。
英和翻訳フィルタ WebDict の構成図
CGI を利用する Type:1 と delegate のようなプロキシーを利用する Type:2 の形態の 2 種類の方法があります。
 主な機能および特徴は次の通りです。
  • 英語を日本語に置き換えます:-)。
  • 単語の他、熟語にも対応しています。熟語の単語数は任意に設定ができます。
  • 表示方法には、「訳語のみ」、「英語[訳語]」、「訳語[英語]」、「訳語(コメントに英語)」のいずれかを選択できます。
  • HTMLタグを認識するため、レイアウトを破壊することはありません。
  • HTMLファイル以外は翻訳対象にしません。
  • META HTTP-EQUIV="Content-Type" タグを認識します。
  • 出力する文字コードを指定できます。
  • BASE HREF タグを追加できます。
  • FONT FACE タグをキャンセルできます。
  • BASEFONT FACE タグをキャンセルできます。
  • STYLE タグをキャンセルできます。
  • A HREF タグを書き換えることができます。
  • AREA HREF タグを書き換えることができます。
  • 未登録単語をログに記録できます。
  • DeleGate等のフィルタとして動作できます。
  • CGIで動作できます。CGIでリンクをたどっていくことができます。
  • 辞書引きに失敗した場合、単語の語尾変化を利用して辞書引きを試みます。
  • 上記の機能の幾つかは、定義ファイルにより設定ができます。
  • 辞書はテキスト形式ですので、ネットワーク上で公開されている辞書を取り込んで簡単にカスタマイズができます。
  • 各種形式の辞書をインポートする import コマンドが付いています。
  • 重複した単語をマージできる joindic コマンドが付いています。
  • HTMLファイルのタグを表示できる showtag コマンドが付いています。
  • 作成した辞書をチェックできる checkdic コマンドが付いています。
  • 指定の URL を取得できる webget コマンドが付いています。
  • コマンドプロンプトから辞書を引ける showdic コマンドが付いています。
  • CGI から呼び出すサンプル HTML と CGI プログラム webdict.cgi が付いています。
  • Location ヘッダ (Redirect) が指定されていた場合、自動ではリダイレクトされません (CGI 利用時).
  • ソースが公開されています。
  • ドキュメントは日本語ですから、英語の苦手な人でも大丈夫です。:-)
  • UNIXオペレーティングシステムで動作します。FreeBSD(98) と NEC UX/4800 で動作を確認しました。特殊な機能は使用していませんので、他の OS 上でもコンパイルして動作するものと思います。
ぜひ一度お試しください。



2.堅いことトップへ
  • 再配布する際は事前に連絡をしてください。
  • 営利目的には使用できません。
  • このソフトウェアを使用したことによっていかなる障害が発生しても, 作者は一切の責任を追いません。
詳細はアーカイブ中の COPYRIGHT を見て下さい。



3.プログラムトップへ
 WebDictの最新版は Ver1.16 (更新日: 1997/10/17) です。
  ソース: WebDict Ver1.16
 辞書は著作権等の問題があるため掲載していません (巨大すぎてアップロードが大変、ホームページの容量制限もありますし...)。 その代わりにインポートコマンドを用意しました。 各自で作成して、使用状況にあった辞書にカスタマイズしてください。



4.辞書ファイルトップへ
 このプログラムの翻訳結果を左右するのは、なんといっても辞書です。 みなさんの環境に合わせてどんどんカスタマイズしてください。
 辞書ファイルはテキスト形式です。 1行に1単語または1熟語を記述します。 フォーマットは次のようになります。
  • ENGLISH [TAB] JAPANESE,JAPANESE,...
  • ENGLISH ENGLISH... [TAB] JAPANESE,JAPANESE,...
英語と訳語の間はタブで区切ります。 熟語を記述する場合は、単語と単語の間に半角の空白を入れます。 訳語はカンマで区切って複数書けます (実は品詞を記述することもできるのですが、現在は記述しても無視されます)。 よって、ネットワーク上で公開されている辞書を簡単に取り込むことができます。 ただし、単語または熟語の重複には注意してください。 重複している場合は、辞書インデックスの都合上正常な辞書引きが行われません (重複した単語のうち、どの訳が結果として出力されるかわかりません。 プログラムが暴走することはありません)。
 大文字と小文字は区別されます。 最初の辞書引きで訳語見つからなかった場合は、すべて小文字として再度辞書を引きます。 さらに辞書にない単語は、語尾変化を利用して辞書を引きます。



5.語尾変化辞書トップへ
 辞書に存在しない単語や熟語があった場合、 そこであきらめずに語尾変化を行って再度辞書を検索します。 このとき使用するのが語尾変化辞書です。
 語尾変化辞書のフォーマットは次の通りです。
  • hinshi [tab] string [tab] original [tab] surffix
各項目の間はタブで区切ります。hinshi は Ver1.15 では意味を持ちません。 string には変化している語尾を記述し、original には変化前の語尾変化(辞 書に登録されている)を記述します。surffix には、訳語に付加する語尾を記 述します。定義できる語尾変化は最大で 256 個ですが、tail.c 内の定義を変 更することでさらに大きくできます。詳細は、dic/tail.dic を参照してくだ さい。



6.辞書のインポートトップへ
 ネットワーク上に公開されている辞書を WebDict 用の辞書にインポートすることができます。 インポートできる辞書の形式は次の通りです。
  • webdict - WebDict 辞書
  • ejdic - ノートルダム女子大学 POETS プロジェクト の辞書
  • gene - GENE一般英和辞書 95年版
  • trtext - TRTEXT 用辞書 基本辞書, コンピュータ辞書など
  • etoj - EtoJ Proxy (etojfilter) の辞書
  • pdicej - PDIC EJ (LSD-3) の辞書
  • pdicje - PDIC JE (LSD-3) の辞書
  • edict - EDICT (LSD-3) の辞書
 詳細は、import.c ファイルを見てください。 以下にインポートする方法を記述します。 辞書はすべて EUC コードであるものとします。 SJIS の場合はあらかじめ nkf などにより EUC コードに変換しておいてください。
  • % import -ejdic ejdic.euc > ejdic.dic
  • % import -gene gene.euc > gene.dic
  • % import -trtext trtext.euc > trtext.dic
  • % import -etoj ejdic.euc > etoj.dic
  • % sort ejdic.dic gene.dic trtext.dic etoj.dic | uniq > work.dic
  • % joindic -file work.dic > work2.dic
  • % import -webdict work2.dic > webdict.dic
  • (辞書を編集する)
  • % makeidx
  • % checkdic
 ソートした後に uniq コマンドでフィルタしてください。 joindic で重複した単語をマージしてくれます。 最後にもう一度 import を使ってクリーニングします。
 なお、これですべてが完全にインポートできるわけではありません。 元辞書、途中の辞書ファイルあるいは最終的にできる辞書を編集し、 最適な辞書を作成してください。 特に訳語の順序までは判断できません。 trtext, etoj, pdicej, pdicje, edict 形式の辞書ではほぼ完全な辞書が得られますが、 ejdic, gene 辞書ではインポート後にかなり修正を加えなければなりません。
 最後に checkdic を使って完全な辞書ができたかチェックします。 以上の作業を根気よく繰り返します。 同じような形式の修正作業がある場合は、 import コマンドを修正するほうが早いでしょう。



7.改版履歴トップへ
 Ver1.16 1997/10/17
  • import に EDICT (LSD-3) 形式の辞書を追加した.
  • import に PDIC-EJ (LSD-3), PDIC-JE (LSD-3) 形式の辞書を追加した.
  • import に エラーとなった行を表示する -error オプションを追加した.
 Ver1.15 1997/10/15
  • 辞書コンバータ import のバグ (henkei関数) のバグを修正した.
  • import の変換機能を少しだけ強力にした.
 Ver1.14 1997/10/12
  • 辞書コンバータ import を作成した. ejdic, gene, trtext, etoj 形式の辞書をインポートできるが完全ではない.
  • 重複した単語の訳語をマージする joindic コマンドを作成した.
 Ver1.13 1997/10/09
  • CGIから webget への URL の渡し方を、環境変数に変更した.これでコマンドラインから渡すよりも少しは安全になった. webget 自体は今まで通りコマンドラインから URL を取得することも可能です.
  • webdict.dic の語数を 3000 語ほど追加した (現在約 78700語).
  • misc/exist.c を作成した.これで未登録単語のみ抽出できる.
  • webdict.html-dist 中の余計なコードを削除した.
 Ver1.12 1997/10/08
  • 語尾変化テーブルを定義ファイル (dic/tail.dic) に移した.
  • 語尾変化 "ing" -> "y" を追加した.
  • cgi.cの不要な機能を削除し最小限の機能だけ含めるようにした.
  • 語尾変化が "" のときテーブルに追加しないようにした.
  • 辞書の形式を調べる checkdic を作成した.
  • checkdic により、辞書の形式をチェックし修正した.
  • checkdic で調べる項目を増やした.
  • SIGPIPE をトラップするようにした.
 Ver1.11 1997/10/03
  • META HTTP-EQUIV="Content-Type" が無い場合に埋め込むようにした.これは、MSIE4.0が文字化けするための対処です.
  • cgi.c で取る最低限のログ (log_mode=2) を 1行で収まるようにした.
 Ver1.10 1997/10/02
  • インデックスファイルの作成および読み込み時にファイルをロックするようにした.
  • インデックス読み込み時に辞書より古いとき、インデックスの再作成をするようにした.
  • URLの文字として "#" を許可した.
  • リンク書き換え時の相対パス URL で、ファイルパスとファイル名の間の "/" が抜けていたのを修正した.
  • webget で、URL にセクション "#" が指定されている場合は、それ以降を削除してからURLの取得を行うように修正した.
  • BASE HREF タグの挿入で、ホスト名だけでなくパス指定も含めるようにした.
  • umask(002) を指定するようにした.
  • 環境変数 (LANG=japan, TZ=JST-9) を設定するようにした.
  • 熟語の最大語数を指定 (max_idiom) できるようにした.
  • showdic に verbose モード (/v) を追加した.
  • makefile と conf.c, cgi.c の定義ファイルのdefine名称が違っていたものを修正した.
 Ver1.09 1997/09/26
  • 辞書をインデックスファイル型に変更した.
  • dict.c を分割し tail.c を作成した.
  • 熟語および語尾変化での訳語が REPORT_SHORT 形式でないバグを修正した.
  • Copyright を追加した.
  • flex_word_tail の引数誤りを修正した(小文字で検索していた).
  • 語尾変化に pping, tting を追加し、順序を最適化した.
  • 辞書の初期化の場所を変更した.
  • URL の文字として ":" を許可した.
  • 英語と訳語が同一の時の処理を正常に動作するよう変更した.
  • 辞書インデックス作成の表示を詳細にした.
  • showdic の対話形式を親切にした.
  • 語尾変化に er->e を追加した.
  • 語尾変化テーブル(長さの計算)の初期化 (tail_init) を追加した.
  • duration の計算を細かく (time->gettimeofday) した.
  • タグ関係のサブルーチンを mainloop.c から分割し meta.c とした.
  • news://, nntp:// タグを追加した.
  • 単語の文字に ";","&", "#"を追加した (&, <, >, &#xxx; に対応するため).
  • encode_url, cut_url のバグを修正した.
  • 辞書に品詞を記述できるように dic_fgets 関数を作成した.
  • encode_url での不正な free 関数の呼び出しを削除した.
  • © に対応するため "#" を追加し ";" の語尾を追加した.
  • showdic 実行時は unknown.dic を作成しないようにした.
  • showdic に translation 機能を追加した.
  • ":", ";", "/" の語尾変化を追加した.
  • dict_root を追加し、実行ディレクトリを指定するようにした.
  • showtag.c において tag 共通関数は tag.c のものを使うようにした.
  • *.h に重複読み込み防止の #ifndef, #define 〜 #endif を記述した.
  • tag のトークンの切れ目を調べるようにした.
  • AREA HRE Fタグも書き換えるようにした.
  • encode_string のバグ (char * -> unsigned char *) を修正した.
  • gettimeofday 関数の引数の誤りを修正した.
  • cgi.c の cftime 関数を strftime 関数に置き換えた.
 Ver1.08 1997/09/18
  • A HREF タグを書き換えて CGI でも翻訳フィルタを介せるようにした.
  • CGI で GET メソッドを受け入れるようにした.
  • これ以降では、各ソースのバージョンをメジャーバージョンに統一するようにした(今までは、ソースのバージョンは個別で無関係だった).
  • 語尾のピリオドを単語に含むようにした。単語のマッチは語尾変化で対応する.
  • Sept. Mr. 等の略語に対応するため.
  • version.h をすべてのモジュールがインクルードするようにした.
  • createdic で stdin からの原文辞書入力を可能にした.
  • capacity を追加した(テキストデータでないと判断する境界値).
  • ソース中のすべての jukugo を idiom に変換した.
  • 6単語の熟語まで認識するようにした.
  • base_target を追加した.
  • 括弧付きの単語をフォントを小さくして表示する font_size を追加した.
  • createdic で統計情報を詳細に出すようにした.
  • dict_level の値は 4 をデフォルトにした.
  • dict_dir を word_dir に変更した(初期値も dic から word へ).
  • 単語に ":", ";", "&" を追加した.
 Ver1.07 1997/09/10
  • webdict.cgi を新規に追加した.
  • 出力時に HTTP ステータスヘッダを落とすオプション (-status yes/no) を追加した.
  • webget を新規に作成した。指定のURLを取得するプログラム.
  • ピリオドなどの特殊記号が続くときは単語の切れ目と判断するようにする.
  • モジュールを分割した.
  • FORM_REVERSE を FORM_DUAL (オプション名に統一) に改名した.
  • 熟語辞書と単語辞書を分けた.
  • 5単語熟語まで認識できるようにした.
  • 高速化のため2,3単語熟語が存在するか検査する処理を追加した.
  • 処理に要した時間を表示 (verbose モードで) するようにした.
  • "訳語[英語]" の表示形式 (FORM_DUAL) を追加した.
  • "訳語<!--英語-->" の表示形式 (FORM_REMARK) を追加した.
 Ver1.06〜Ver1.01
  • リリース版のバグフィックスなどを行った.
 Ver1.00
  • リリース版とする.


8.未解決のバグトップへ
 んー。ポッケにしまっとこっと。:p
 詳細は、アーカイブ中の BUGS ファイルを見て下さい。
  注意:CGIで実行する場合、セキュリティホールに注意してください。 目的のURLへのアクセスは、クライアントからではなく CGIのあるサーバからのアクセスになります。 例えば、プロバイダのホームページで実行した場合、 プロバイダのメンバのみしかアクセスできないページに対し、 不特定多数の人間がアクセスできてしまう可能性があります。 これに対する対策として、自ドメインのURLを指定した場合は、 アクセスを拒否するようなコードを埋め込むことです。
 showtag コマンドで、1件しか見つからなかったときのレポートが異常です。



9.今後の予定トップへ
 今後の予定は次の通りです。 なお、いつどの機能が実装されるかはわかりません。
  • 辞書を(コンピュータ向けに)最適化し登録語数を増やす.めざせ 10 万語!
  • 品詞を認識して語尾変化させるようにする. 辞書の検索方法を変更しないとならない(品詞ごとの訳語登録が発生するため).
  • リンクの書き換えで BASE HREFが指定されていた場合は、そちらを優先させるようにする.
  • META HTTP-EQUIV="Refresh" タグを書き換える.
  • Content-Type="text/plain" のファイルも翻訳できるようにする.
  • FRAME SRC タグを書き換える(んー、これを忘れていたとは...).
  • CGIで実行するときのセキュリティホールに対する対策をする.


10.終わりにトップへ
 この手のプログラムは EtoJ Proxy (etojfilter) が有名ですが、 他にはあまり見かけません (まあ最近はブラウザと連携して動作する翻訳ソフトが安く手に入りますから、 必要ないかもしれません)。
 EtoJ Proxy を見つけてから、 ウィークエンド・プログラマーが構想1日&製造1ヶ月で作ったプログラムにしては、 良くできているのではないでしょうか? 最初は本文だけを翻訳して置き換えるものだったのですが、 実際に動作させてみると、 以外にも書き換えないといけないタグが多いことに気がつきました。 プログラムの一部である webget (指定の URL を取得する), showdic (辞書を引く), showtag (URL の指定したタグを表示する) コマンドは、 単独でも十分に使えますのでご利用下さい。
 こんなプログラムですが、どうぞ一度お試しください。
 動作報告、機能改善等のメールを頂けると作者はとっても嬉しいです。



11.参考文献トップへ
 このプログラムを作成するにあたり、 参考にした文献や関連するサイトへのリンクです。

MailTo: mikkun@dokidoki.ne.jp.




目次へトップへ


ぜひ試してみたい

もっと良いのを知ってるよ

もっと良いのを作ったよ

興味ないよ