哈工大信息检索研究室论坛's Archiver

Truman 发表于 2007-8-7 11:40

自动调用Google Translation(Web)进行翻译(in Perl)

今天需要将3000多个西班牙语的句子用[url=http://translate.google.com/translate_t]Google Translation[/url]翻译成英文。
[color=#ffe553][url=http://translate.google.com/translate_t]Google Translation[/url][/color]是一个在线的翻译页面。用户将要翻译的文本粘贴到文本框内,点击Translate按钮,系统回返回带有翻译结果的页面。
开始我尝试手工提交。一次提交500个句子,这样的话6次就处理完了。结果发现可能是由于计算能力限制,Google虽然可以一次处理500个句子,但它“狡猾”的忽略后面大部分句子,只处理了前面一小部分。根据我的实验,一次性提交500句,Google其实只翻译了前27个句子。后面的句子全部“原样”返回。
没有办法,我只好编程实现一个自动提交句子的程序。程序的功能是每次向[url=http://translate.google.com/translate_t]Google Translation[/url]的页面提交一个句子,然后从返回页面中把翻译结果抓取出来,输出到标准输出(可以重定向到文件)。
研究了一下,发现使用Perl内置的LWP模块很容易实现。(我用的Perl 5.8.0)
不敢独享,这里给出我的实现代码:

[font=Courier New]#!usr/bin/perl
################################################################
#         GoogleTranslation version 0.1
#     Translate input files from source language to target language by Google
#     Translation(Web).
#
#     usage: perl GoogleTranslation.pl [file1 file2 ...] >[output file]
#
#   Written by He Wei.
#   The file is created on July 31, 2007.
################################################################
use strict;
use LWP;[/font]
[font=Courier New]my $lang = "es|en";   # "source_language|target_language"
                      # You can change $lang to the lauguage code you want.
                      # (es = Spanish, en = English, zh-CN = Simplified Chinese, ...)
my $delay_time = 60;  #seconds
my $ua = LWP::UserAgent->new;
$ua->agent("GoogleTranslation/0.1");
my $url = 'http://translate.google.com/translate_t';
while(<>) {
  chomp;
  my $res = $ua->post( $url,
    [ 'hl' => 'en',
      'ie' => 'UTF8',
      'text' => $_,
      'langpair' => $lang,
    ]
  );
  die "$url error: ", $res->status_line
    unless $res->is_success;
  if( $res->content =~ /<textarea.*? id=suggestion>(.*?)<\/textarea>/ ) {
      print "$1\n";
      print STDERR '.';
  }
  sleep($delay_time);
}
[/font]

Reference
[1][url=http://www.perlchina.org/archive/archive.php?action=archive&page=15]LWP 与 WEB 的基本使用[/url][2] [url=http://lwp.interglacial.com/ch05_01.htm]Perl & LWP (Chapter 5)[/url]

小岛 发表于 2007-8-13 10:39

西班牙语啊,牛。

zhanhua 发表于 2008-4-24 16:06

呕液!:lol :victory:

guolinchang 发表于 2008-5-2 20:37

见到牛人了

jt74 发表于 2008-6-15 14:46

不错,学习下!!!!

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.