- 论坛徽章:
- 0
|
最近翻译了一些东西,发现如果每次有翻译提示,即使翻译的前言不搭后语,但如果将那些生词都提示出来了,也能帮助我尽快的掌握原文意思,进行翻译:
也可以将内容贴到有道词典中,获取翻译数据,但复制粘帖多了,就烦了,何不用Perl语言实现呢?
以下ID是我申请的,一个小时内不能用超过1000次,所有大家最好自己申请一个新的:
这是个模块,叫 Translate::Youdao
调用的时候:- #!perl
- #
- use 5.014;
- use Translate::Youdao qw(translate_with_youdao);
- my $need_translate_str = 'You can find the answers to these exercises in ( Answers for Chapter 16 ) on page 345.';
- #$need_translate_str = 'We';
- say translate_with_youdao($need_translate_str);
复制代码 模块保存在 Translate/Youdao.pm 中:
Youdao.rar
(1.1 KB, 下载次数: 17)
内容如下:- package Translate::Youdao;
- use Exporter;
- our @ISA = qw(Exporter);
- our @EXPORT_OK = qw(translate_with_youdao);
- use 5.014;
- use YAML qw(Dump);
- use WebService::Simple;
- use utf8;
- my $service = WebService::Simple->new(
- base_url => 'http://fanyi.youdao.com/openapi.do',
- param => {
- keyfrom => 'Songzan',
- key => '363993902',
- type => 'data',
- doctype => 'json',
- version => '1.1',
- },
- response_parser => 'JSON',
- );
- my $error_info = {
- 20 => 'text is long than 200 characters',
- 30 => 'could not process valid translate',
- 40 => 'Could not support this language',
- 50 => 'Invalid key',
- };
- #my $need_translate_str = 'We have used numerous methods throughout this book.';
- #$need_translate_str = 'We';
- #say translate_with_youdao($need_translate_str);
- sub translate {
- my $need_translate_str = shift;
- state $count = 0;
- $count++;
- say "call Youdao API $count times";
- $need_translate_str =~ s/n't / not /g;
- $need_translate_str =~ s/'ll / will /g;
- $need_translate_str =~ s/'re / are /g;
- $need_translate_str =~ s/t's/t is/g;
- if ($need_translate_str =~ /(['"]).*?\1/) {
- LOOP_REPLACE:
- foreach (1 .. 5) {
- $need_translate_str =~ s/['"]/(/;
- my $time = $need_translate_str =~ s/['"]/)/;
- last LOOP_REPLACE if ($time eq '');
- }
- }
- my $res = $service->get( { q => $need_translate_str } );
- my $json = $res->parse_response;
- my $error_code = $json->{errorCode};
- if ($error_code == 0) {
- my $translation = $json->{translation};
- # say ref($translation);
- my @lines = @{$translation};
- my $str = join ' ', @lines;
- # sleep(4);
- return $str;
- }
- else {
- say 'Warning!' . $error_info->{$error_code};
- return 0;
- }
- }
- sub translate_with_youdao {
- my $en_str = shift;
- if (length($en_str) < 199) {
- return translate($en_str);
- }
- my @str_list = split /\h?\.\h/, $en_str;
- my @cn_str_list = ();
- foreach my $str (@str_list) {
- if (length($str) < 199) {
- # push @all_lines, "$line_number:$file";
- push @cn_str_list, translate($str);
- }
- else {
- my @sub_str_list = split /\h?[,\?]\h/, $str;
- my @sub_cn_str_list = ();
- foreach my $sub_str (@sub_str_list) {
- if (length($sub_str) > 199) {
- say "Length exceed 200 characters:";
- say "<$sub_str>";
- next;
- }
- push @sub_cn_str_list, translate($sub_str);
- }
- push @cn_str_list, @sub_cn_str_list;
- }
- }
- my $cn_str = join ' ', @cn_str_list;
- return $cn_str;
- }
- 1;
复制代码 |
评分
-
查看全部评分
|