September 1, 2007

Google 翻訳に問い合わせて英語を日本語に翻訳するプログラムを Ruby で

Google 翻訳に問い合わせて英語を日本語に翻訳するプログラムを Ruby で作ってみました。
これを使って自分専用の英語学習用のツールを作りたいんです。

require 'rubygems'
require 'hpricot'
require 'net/http'
require 'kconv'
$KCODE = 'u'

def en_ja(text)
  Net::HTTP.version_1_2
  Net::HTTP.start('translate.google.com', 80) {|http|
    response = http.post('/translate_t', "langpair=en|ja&text=#{text}")
    doc = Hpricot(response.body)
    return (doc/"#result_box").inner_text.toutf8
  }
end

puts en_ja("I love Ruby.") #=> 私はルビーを愛する。

コマンドラインから使えるようにしたりすると便利かもしれません。
こんな感じ。

#!/usr/bin/ruby
require 'rubygems'
require 'hpricot'
require 'net/http'
require 'kconv'
$KCODE = 'u'

Net::HTTP.version_1_2
Net::HTTP.start('translate.google.com', 80) {|http|
  response = http.post('/translate_t', "langpair=en|ja&text=#{ARGV[0]}")
  doc = Hpricot(response.body)
  puts (doc/"#result_box").inner_text.toutf8
}

以下のように実行。

$ ./en_ja.rb "I love Ruby."

そんなに便利でもないか。

追記:
CGI にした。

#!/usr/bin/ruby
require 'cgi'
require 'net/http'
require 'kconv'
$KCODE = 'u'

def en_ja(text)
  Net::HTTP.version_1_2
  Net::HTTP.start('translate.google.com', 80) {|http|
    response = http.post('/translate_t', "langpair=en|ja&text=#{text}")
    if response.body =~ /id=result_box[^>]+>([^<]+)

デモ: http://jugyoo.org/util/en_ja.cgi?text=I love Ruby

追記:
簡単な Web インターフェイスを作成。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
  <meta http-equiv="Content-type" content="text/html; charset=utf-8">
  <title>translate_test</title>
  <script type="text/javascript" src="./jquery.js"></script>
  <script type="text/javascript" charset="utf-8">
  function on_load() {
    $('#translate_button').click(
      function() {
        $.post("/util/en_ja.cgi", { text: $('#input_text')[0].value },
          function(data){
            $('#output_text').html(data);
          }
        );
      }
    );
  }
  </script>
  <style type="text/css" media="screen">
    textarea {
      display: block;
      width: 100%;
    }
    #main {
      width: 80%;
      margin: 0 auto;
    }
    #input {
      text-align: right;
    }
  </style>
</head>
<body onLoad="on_load();">
  <div id="main">
    <div id="input">
      <textarea id="input_text" name="text" rows="8" cols="80">The only thing we have to fear is fear itself.</textarea>
      <input type="button" name="translate" value="translate" id="translate_button"></input>
    </div>
    <div id="output">
      <div id="output_text" />
    </div>
  </div>
</body>
</html>

jQuery を使ってみた。

デモ: http://jugyoo.org/trans/translate_test.html

3 Comments »

  1. Comment by Beck, September 3, 2007 at 23:42 #

    youが翻訳されない・・・

  2. Comment by jugyo, September 3, 2007 at 23:50 #

    あらっ!

    ちょっと調べてみましたが、どうやら Google 翻訳だと「you」は訳されないみたいです。
    でも「nil 」ってでるのは嫌だなぁ。

  3. Comment by Anonymous, July 23, 2008 at 12:07 #

    私はショートを守った

TrackBack URI

Leave a comment

※上の項目は入力してもしなくてもよいです。