■ついったークライアントをVBで作っていくと、自分が使いたいように作りこめるということもあって、いろいろ欲が出てくる。今まで専用クライアントを使っておらず、もっぱらtwitter.comから直接使っているので、そちらとの比較で。
Retweetという、自分がウォッチしている人のログエントリを、自分のログをウォッチしている人に転送するアクションがあって、そのとき、Retweetであることを示すために'RT'というマークを入れる慣習がある。webのインタフェースだとこのRTというマークが自動的に入らないので、ちょっと面倒ということがあってそのあたり自動化できるといいなあ、といった些細なことから、英文のエントリを自動翻訳できるといいなあ、とか。
自動翻訳といっても、それ用のソフトが手元にあるわけではないので、ローカルには処理できないし、もちろん自前で翻訳エンジンを作るのも無理。というわけで素直にオンラインでAPIを公開している翻訳エンジンを探す。
見つかったのはBing, Yahoo, Google。Bingは.NETでVisual Studioとの親和性も高い。YahooはGetメソッドの引数として翻訳したい文書を渡すとRSSで結果を返してくれる(それ以外のフォーマットもある)。GoogleはAJAX。
とりあえずとっつきやすいBingを試した。アプリケーションIDを取得して、Visual StudioにI/Fコードを生成させて、と翻訳させてみたらこれがひどい。
単語レベルで翻訳はできているようなのだけど、構文レベルはダメなようで、ちょっと使えない。
VBでクライアントを作っているとはいっても、表示にはWebBrowserクラスを使っているので、その中でJavaScriptは使えたりする。ただ、AJAXだとJavascriptの実装部分が大きくなってしまうのと、VBのソースコードの中での扱いが面倒になってくるので、まずはとっつきやすいYahooのAPIを触る。
Yahoo-PipeのAPIはかなり単純なもので、 http://pipes.yahoo.com/poolmmjp/ej_translation_api?_render=rss&text=[翻訳対象] という格好で投げかけると応答がRSSの形式で返されるので、あとはRSSをパーシングすればいい。
こちらの翻訳精度は、まあ機械翻訳だし、とある程度納得できるもので、twitterのように140字制限の中では機械翻訳程度でもだいぶいいところまでいくのかもしれない。ただ、Yahooの翻訳エンジンは翻訳に失敗すると翻訳語のテキストを何も返さなくなってしまう。省略、圧縮、twitterならではの表現が混ざっていることが原因らしい。
翻訳に失敗する場合は、前処理でオリジナルの英文を編集してから再翻訳できる実装にした。もしかしたらGoogleならもっと高い精度で、翻訳の失敗もなく応答してくれるのかもしれないけれど、今はとりあえずYahooのAPIで済ましている。正直なところはBingがYahoo並の精度で翻訳してくれるのがいいんだけど、欲しいのは「使える翻訳」であって便利なAPIではないから。