自动调用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] 西班牙语啊,牛。 呕液!:lol :victory: 见到牛人了 不错,学习下!!!!
页:
[1]