Hatena::ブログ(Diary)

gentoopenguin83のメモメモ

2011-02-20

google翻訳を利用した英和-和英辞書コンソールコマンド

コマンドライン上で簡易的に英単語を調べるのに使います。

ソースコード変数名で悩んだときとかに使いたくて作りました。

hpricotをgemインストールすれば使えると思います。

ただし、ruby1.9だと英和が出来ません。なんかhpricotにおけるutf8の処理に問題があるようです(TODO:あとで調べる)。

【使い方とか】

$ rvm list
rvm rubies
       ruby-1.8.7-p330 [ x86_64 ]
       ruby-1.9.2-p136 [ x86_64 ]

$ rvm 1.8.7
$ ruby translator.rb こんにちわ
Hello
$ ruby translator.rb hello
こんにちは

$ rvm 1.9.2
$ ruby translator.rb こんにちわ
Hello
$ ruby translator.rb hello

/Users/hoge/.rvm/gems/ruby-1.9.2-p136/gems/hpricot-0.8.3/lib/hpricot/builder.rb:9:in `gsub': invalid byte sequence in UTF-8 (ArgumentError)
	from /Users/hoge/.rvm/gems/ruby-1.9.2-p136/gems/hpricot-0.8.3/lib/hpricot/builder.rb:9:in `uxs'
	from /Users/hoge/.rvm/gems/ruby-1.9.2-p136/gems/hpricot-0.8.3/lib/hpricot/tag.rb:139:in `to_s'
	from /Users/hoge/.rvm/gems/ruby-1.9.2-p136/gems/hpricot-0.8.3/lib/hpricot/traverse.rb:160:in `block in inner_text'
	from /Users/hoge/.rvm/gems/ruby-1.9.2-p136/gems/hpricot-0.8.3/lib/hpricot/traverse.rb:160:in `map'
	from /Users/hoge/.rvm/gems/ruby-1.9.2-p136/gems/hpricot-0.8.3/lib/hpricot/traverse.rb:160:in `inner_text'
	from /Users/hoge/.rvm/gems/ruby-1.9.2-p136/gems/hpricot-0.8.3/lib/hpricot/traverse.rb:160:in `block in inner_text'
	from /Users/hoge/.rvm/gems/ruby-1.9.2-p136/gems/hpricot-0.8.3/lib/hpricot/traverse.rb:160:in `map'
	from /Users/hoge/.rvm/gems/ruby-1.9.2-p136/gems/hpricot-0.8.3/lib/hpricot/traverse.rb:160:in `inner_text'
	from /Users/hoge/.rvm/gems/ruby-1.9.2-p136/gems/hpricot-0.8.3/lib/hpricot/elements.rb:108:in `block in inner_text'
	from /Users/hoge/.rvm/gems/ruby-1.9.2-p136/gems/hpricot-0.8.3/lib/hpricot/elements.rb:108:in `map'
	from /Users/hoge/.rvm/gems/ruby-1.9.2-p136/gems/hpricot-0.8.3/lib/hpricot/elements.rb:108:in `inner_text'
	from translator.rb:40:in `block in <main>'
	from /Users/hoge/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:627:in `start'
	from /Users/hoge/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:490:in `start'
	from translator.rb:36:in `<main>'

【translator.rb】

#!/usr/bin/env ruby 
#-*- encoding: utf-8 -*- # ruby v1.9
#$KCODE = 'u'            # ruby v1.8

require 'rubygems'
require 'hpricot'
require 'net/http'
require 'kconv'

if ARGV.length == 0
    print "\nUsage : \n"
    print "#{$0} \"query sentense (Japanese or English)\"\n\n"
    exit
end

if ARGV.length>1
    print "\nError : \n"
    print "too many queries\n\n"
    exit
end

if ARGV[0] =~ /^[ -~。-゚]*$/
   # english
   query = "langpair=en|ja&text=#{ARGV[0]}"
else
    # japanese
    query = "langpair=ja|en&text=#{Kconv.kconv(ARGV[0], Kconv::UTF8)}"
end

Net::HTTP.version_1_2

#proxy_class = Net::HTTP::Proxy( 'proxy.hoge.com', 10080 )
#http = proxy_class.new( 'translate.google.com', 80 )
#http.start { |http|
Net::HTTP.start( 'translate.google.com', 80 ) { |http|
    response = http.post('/translate_t', query)
    puts Hpricot(response.body).search("#result_box").inner_text.toutf8
}

【参考にさせて頂きました。(というかただの組み合わせ・・・)】

rubyで半角のみ、全角のみを判定する正規表現

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