英語->日本語翻訳機能付
Webプロキシサーバの構築メモ

英語を自動的に日本語へ翻訳してくれるプロキシサーバ

Last Update : 2000-12-2

since : 1999-12-10

感謝 - ChangeLog  
私がこのメモを Linux users ML に投稿して以来、このページを 1年間にわたり ChangeLog に掲載し続けて頂いたことに感謝します。 (2000-12-2)
ご説明  
英語->日本語翻訳機能付Webプロキシサーバとは、

クライアントブラウザが翻訳機能付WebプロキシサーバにWebページをリクエストすると、翻訳機能付プロキシサーバはリクエストされたページを英語から日本語へ翻訳してクライアントブラウザに返すものです。

クライアントは普通にプロキシサーバを経由して Web にアクセスすると、英語のページ日本語へ翻訳されているというわけです。

動作原理  
簡単に言うと、クライアントとプロキシサーバの間で翻訳フィルタを通します。

そのフィルタに「翻訳の王様 Linux 版」の kingtr コマンドを使用します

具体的にはクライアントと実プロキシの間に、もう一つ翻訳フィルタとして機能するプロキシサーバが介在します。クライアントはこの翻訳フィルタをプロキシサーバとして用います。

この翻訳フィルタにはプロキシサーバ delegate を用います。delegate はクライアントにデータを渡すときにフィルタをかけることができます。

このフィルタに 日本IBM インターネット翻訳の王様 Linux版 を使用することで、クライアントに翻訳されたページを返すことができます。

接続概念図 - プロキシサーバを 2段に構える

1 クライアントブラウザは翻訳エンジンに対して Webページをプロキシリクエストします。
2 翻訳フィルタは本当のプロキシサーバに対して、リクエストを転送します。
3 プロキシサーバは Webサーバに対し Webページをリクエストします。
4 Webサーバはプロキシサーバに Webページを送信します。
5 プロキシサーバは受け取った Webページを翻訳フィルタに送信します。
6 翻訳フィルタはプロキシサーバから受け取った Webページを翻訳し、クライアントブラウザに送ります。
制限事項

 

ここで説明する「英語->日本語翻訳機能付プロキシサーバ」の動作に関して以下の制限事項があります。
  • 英語のページと日本語のページを区別できないので、日本語のページまで翻訳してしまう。
  • HTML タグが崩れることがある
  • 画像が表示されないことがある
  • 原文(英語)と訳文(日本語)の両方が表示されてしまう
動作設定-インターネット翻訳の王様 Linux

 

翻訳の王様の入手

まずIBM インターネット翻訳の王様 Linux版を入手します。「インターネット翻訳の王様 POWER+」というパッケージを購入するか、体験版を入手します(1999/12/10)まで使用できます。

※2000-12-1 現在は Linux 版の体験版は配布されていません。

翻訳の王様 Linux版は rpm 形式で構成されていて、RedHat 5.2 と TurboLinux4.0 用があります。RedHat5.2J と TurboLinux4.0J では問題なく動作しました。他のディストリビューションでは確認していません。

(2000-11-25 : redhat 6.2J では TurboLinux 4.0J 用でインストールできました)

README.txt によると

基本ソフトウェア:

1. LASER5社製 日本語 redhat Linux 5.2

必要パッケージ:
kernel-2.0.36、glibc-2.0.7、libstdc++-2.8.0、libwcsmbs-0.0.5、rpm-2.5.5、mule-2.3

2. ターボリナックス ジャパン社製 TurboLinux 日本語版 4.0

必要パッケージ:
kernel-2.2.9、glibc-2.0.7、libstdc++-2.8.0、rpm-2.5.5、mule-2.3

コンピューター本体: 上記基本ソフトウェアが稼働する PC/AT互換パソコン

ハードディスク: インストール時に25MB以上の空き容量が必要
( /usr パーティションにインストールされます)

とのことです。上記の条件を満たした PC であれば動作すると思われます。

インストール

製品の中かダウンロードサイトに以下の rpm ファイルがあるので探して、rpm コマンドでインストールします。

$ su
# rpm -ivh king-1.00-rh52t-1.i386.rpm (redhat 5.2J の場合)
# rpm -ivh king-1.00-tb40t-1.i386.rpm (redhat 6.2J の場合)
# rpm -ivh king-1.00-tb40t-1.i386.rpm (TurboLinuxの場合)

なにも rpm から文句が言われなければインストール完了です。苦情が出ればライブラリに問題があるのかもしれません。

とりあえず試してみる

翻訳の王様は2つの英文翻訳方法があります。

1. コマンドライン翻訳(/usr/local/bin/kingtr)
コマンドラインから英文もしくは英文を含んだファイルを、引数として渡すと翻訳されます。text または html 形式で翻訳結果が出力されます。

これを、delegate が外部フィルタとして呼び出します。

2. ブラウザ翻訳(/usr/local/etc/kingtrd)
翻訳の王様がデーモンとして起動しローカルからのプロキシリクエストを受けると、翻訳してローカルブラウザ等に返します。
デフォルトではローカルからの要求しか受け付けませんが、delegate を利用することでネットワーク上どこからでも利用することが出来ます。(後述)

まずブラウザ翻訳は今回関係ないので、「コマンドライン翻訳」を試します。

$ /usr/local/bin/kingtr -e "This is a pen."
これはペンです。
$
上記のように翻訳ができればインストールは正常にできているようです。

あとは /usr/doc/king-1.00/README.txt を読んで必要な環境設定を行ってください。

動作設定-DeleGate

 

DeleGate の入手

まず DeleGate を入手します。ftp://ftp.etl.go.jp/pub/DeleGate/ からダウンロードします。

※1999/12/10現在の最新安定版は delegate5.9.10.tar.gz. です。

DeleGate はソースで公開されているので各々コンパイルする必要があります。

詳しい使い方は http://wall.etl.go.jp/delegate/ をご覧ください。

コンパイル

まず適当なディレクトリに展開し、make します。make するためのドキュメントが展開されたディレクトリに README.MAKE というファイル名で作成されていますので目を通してください。

$ tar zxvf delegate5.9.10.tar.tar
$ cd delegate5.9.10
$ make PATH=".:$PATH" CC=gcc

コンパイルが終わると ./src/ ディレクトリの中に delegated というファイルができているはずです。これが delegate 本体です。

delegate 本体は /usr/sbin 等に移しておくのが良いでしょう。

翻訳フィルタの起動

クライアントへ渡すデータを delegated から kingtr へ渡すために CFI(Common Filter Interface) という設定ファイルを書かなければなりません。

しかし CFI のドキュメント(http://wall.etl.go.jp/delegate/cfi/)の文字化けがひどくよくわからないので、他の CFI から持ってきたものを変更して使用しました。

#!cfi
#
# DeleGate to KINGTR
#
Content-Type: text/
Filter: /usr/local/bin/kingtr -t html
--
del2king 1Kbytes
上記の内容を del2king というファイルにします。
#!/bin/sh
/usr/sbin/delegated -P8080 PROXY=http://your.delegate.server:8080/ CACHE=no PERMIT="http:*:*" FTOCL=del2kingtr
そして上記のように delegated を起動します。(上記の例は改行してありますが実際は1行に書いてください。)

ここで起動したパラメータの意味は

-P8080 delegated がクライアントからの接続を待つポート番号です。
PROXY=http://〜:8080/

実プロキシのURLとポート番号を指定します。delegated はここで指定した実プロキシサーバにリクエストを転送します。

もし実プロキシと翻訳フィルタが同じホストの場合は
PROXY=http://localhost:8081/ などとするとよいでしょう。

CACHE=no delegated がキャッシュを取らないようにします。
PERMIT="http:*:*" delegated にアクセスできるパーミッションを指定します。ここでは http でアクセスしてくれば、どこからでも、どこへでも接続を受け入れます。
FTOCL=del2kingtr CFIファイルを指定します。絶対パスで指定するのが良いでしょう。

のようになります。もっと詳しいパラメータの説明は、ソースを展開すると doc/ ディレクトリが出来ますので、その中の manual.txt を参照してください。(和訳は関連リンクにあります。)

動作設定-ブラウザ

 

ブラウザのプロキシ設定

次にクライアントのブラウザを設定します。

ブラウザのプロキシサーバ(http)を delegated が動作しているホスト名とポート番号を指定します。

あとは普通に英語のサイトに接続してください。うまく設定できていれば以下のように翻訳されて表示されるはずです。

おまけ-ブラウザ翻訳をリモートから使う

 

翻訳の王様のブラウザ翻訳はローカルのブラウザからの要求は受け付けますがリモートからのアクセスは受け付けません。

しかしローカルにプロキシサーバ(delegated)が動作していて、しかしリモートからローカル delegated 経由でアクセスすれば、kingtrd はローカルからのアクセスと認識し何も問題なくブラウザ翻訳を行うことが出来ます。

kingtrd の設定

まず /usr/doc/king-1.00/README.txt や man kingtrd を読んで kingtrd が動作するように設定してください。

とくに delegated 用の設定などはありません。

DeleGate の起動

#!/bin/sh
/usr/sbin/delegated -P8080 SERVER=http://localhost:9021/ CACHE=no PERMIT="http:*:*"

そして上記のように delegated を起動します。

ここで起動したパラメータの意味は

-P8080 delegated がクライアントからの接続を待つポート番号です。
PROXY=http://localhost:9021/ localhost の Port 9021 で接続を待っている kingtrd へプロキシリクエストを転送します。
CACHE=no delegated がキャッシュを取らないようにします。
PERMIT="http:*:*" delegated にアクセスできるパーミッションを指定します。ここでは http でアクセスしてくれば、どこからでも、どこへでも接続を受け入れます。

ブラウザからの接続

あとはブラウザから以下のように接続します。

http://your.delegate.server:8080/?http://www.yahoo.com

前半が kingtrd の動作しているホスト名とポート番号。? の後ろが翻訳を行う URL です。

/usr/doc/king-1.00/kingtr.htm をローカルに落としてきて8行目を書換えてもアクセスできます。

修正前 var s = "http://localhost:9021?"
修正後 var s = "http://your.delegate.server:8080?"

この kingtr.htm ファイルをブラウザで開いて、テキストボックスに翻訳したいページの URL を入力して「翻訳」ボタンをクリックすることでもできます。

所感-問題点など

 

翻訳精度があまりよくない

やっぱり機械翻訳は限度があります。完全に翻訳された文章を期待するのではなく、英単語辞書位に考えておいた方が良いと思われます。

翻訳に時間がかかる

翻訳プロキシはクライアントからの要求を実プロキシに廻して返答が帰ってきてから翻訳を行うのでどうしても時間がかかります。

/dev/ram かなにかを作っておいて翻訳の王様の辞書(20MB)を移しておくともっと翻訳スピードが上がるかもしれません。

あと翻訳要求がたくさん集中した場合 delegated はどんどんプロセスを fork していくので膨大なプロセスが発生します。kingtr も要求ファイル分のプロセスが起動します。

この辺りは翻訳の王様の公開されているライブラリを活用してオーバーヘッドの少ない翻訳サーバを作るのがいいのでしょう。いつか商品化されるような気がします。

ブラウザの切り替えが面倒

あと面倒なのが「普通のプロキシ」と「翻訳プロキシ」の切り替えが面倒な点です。私は Microsoft IE を使用しているのですが、切り替えるたびにブラウザのプロパティを開いて...という作業が面倒です。

ちょっと見たいときにはリモートブラウザ翻訳を使用してしまいます。

理想的には翻訳したいページがあったら、おもむろに右クリックして「翻訳実行」メニューを選ぶ。すると今見ているページの URL をリモートブラウザ翻訳に渡して翻訳されたページがブラウザに表示される。というのがいいです。

上に書いたことを IE ネットワーク翻訳 で実現しました。

これをもっと進化させてクリップボードにあるテキストを翻訳サーバに投げて翻訳する、ようなものがあればもっと良いと思います。つまりクライアントにインストールしてある翻訳ソフトの翻訳エンジンをすべてサーバに肩代わりをさせたいです。

このようなアプリを同僚に作ってもらいました。ClipNet といいます。

このソフトはクリップボードにある文字列を URL エンコードして http GET Method でサーバに投げるようにしていますので、翻訳だけでなく「選択した文字列をサーチエンジンで検索」ということも出来ます。

早く公開してもらうようにメールを出しましょう

メンテナンス機能の強化

翻訳の王様にもともとついている機能の

  • 翻訳に用いる単語やパターンをユーザー辞書として登録

をブラウザから Webベースで行えたりしたらもっと辞書が共有されて良いのではないだろうか。

メールの翻訳

たとえば

英文のメールを翻訳の王様が動作しているマシンのユーザ king に、メールを出すと翻訳されて返信されてくる

等の機能もあればおもしろいかもしれない。(完全に趣味の世界)

もっと進めて英語のメールを出すと自動的に日本語に翻訳されて、相手に送信される...という機能は恐くて誰も使わないはずだ。

会社に一台翻訳サーバ

会社に一台翻訳サーバがあると結構使えるかもしれない。SI 先に一台置いてあげると(ちゃんとライセンス買って)案外喜ばれるかもしれない。

ライセンスの問題については良くわかりません。「翻訳の王様」の LICENSE.TXT には

「リモートからブラウザ翻訳サーバーへアクセスすることはできません。」

と書かれていますが、「多人数でリモートで使ってはならない」とは書いていないので、おそらく大丈夫ではないでしょうか?>日本IBM様

それに翻訳の王様の API まで公開して度量の広いところを見せているのでリモートで使っても大丈夫でしょう。(自己責任で使用してください。)

関連リンク

 

ETL DeleGate 国産の多機能汎用プロキシサーバ
IBM インターネット
翻訳の王様 Linux版
翻訳ソフト。Windows版やLinux版もあり。Linux 版はライブラリも提供されていて、自分のプログラムから呼ぶこともできる。
zip-translator DeleGateを使用し逐語翻訳エンジンを使って英語のWebページをリアルタイムに翻訳するサーバ。
Columbia Information System Linux Page DeleGate のマニュアルの和訳があります。
おことわり

 

著作権について

Copyright 1999 Mikio Fukushima , mikio@pop06.odn.co.jp

このドキュメントの著作権は Copyright 1999 Mikio Fukushima, mikio@pop06.odn.co.jp が保有しています。

この文章は転載・複製・配布が自由です。その場合著作権を表示してください。あと連絡下さい。

免責

ご自分の責任において、このドキュメントに書かれている内容や参考例を利用してください。


このページに関するご意見・ご要望は mikio@pop06.odn.ne.jp へどうぞ