| Wei 的个人资料Truman's world照片日志列表 | 帮助 |
|
7月31日 自动调用Google Translation(Web)进行翻译(in Perl)今天需要将3000多个西班牙语的句子用Google Translation翻译成英文。
Google Translation是一个在线的翻译页面。用户将要翻译的文本粘贴到文本框内,点击Translate按钮,系统回返回带有翻译结果的页面。
开始我尝试手工提交。一次提交500个句子,这样的话6次就处理完了。结果发现可能是由于计算能力限制,Google虽然可以一次处理500个句子,但它“狡猾”的忽略后面大部分句子,只处理了前面一小部分。根据我的实验,一次性提交500句,Google其实只翻译了前27个句子。后面的句子全部“原样”返回。
没有办法,我只好编程实现一个自动提交句子的程序。程序的功能是每次向Google Translation的页面提交一个句子,然后从返回页面中把翻译结果抓取出来,输出到标准输出(可以重定向到文件)。
研究了一下,发现使用Perl内置的LWP模块很容易实现。(我用的Perl 5.8.0)
不敢独享,这里给出我的实现代码:
#!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; 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); } Reference [1] LWP 与 WEB 的基本使用 |
|
|