Board logo

标题: [转载代码] [转]perl使用LWP模块写的翻译小程序 [打印本页]

作者: PakTC    时间: 2014-1-11 10:37     标题: [转]perl使用LWP模块写的翻译小程序

原文链接:http://www.cnblogs.com/caibird/archive/2013/03/22/2974999.html
作者:第2012位菜鸟

注:原文的脚本是在linux下运行的。在windows下执行需要把编码转为GBK再输出。
  1. #! /usr/bin/perl
  2. #学习perl LWP时用post做的翻译小脚本
  3. #调用的是有道词典
  4. use strict;
  5. use warnings;
  6. use LWP::UserAgent;
  7. use JSON ;
  8. #use Data::Dumper;
  9. my $browser = LWP::UserAgent->new();
  10. print "Please input the word:";
  11. chomp (my $input = <STDIN>);
  12. my $response = $browser->post(
  13. #    'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=https://www.google.com.hk/',
  14.     'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null',
  15.     [
  16.         'type' => 'AUTO',
  17.         'i' => "$input",
  18.         'doctype' => 'json',
  19.     ],
  20.     );
  21. if($response->is_success){
  22.     my $result = $response->content;
  23.     my $json = new JSON;
  24.     my $obj = $json->decode($result);
  25.     #print Dumper $obj;
  26.     my $trans = @{$obj->{'translateResult'}[0]}[0]->{"tgt"};
  27.     $trans = "翻译结果:$trans" if $trans;
  28.     my $string;
  29.     eval{
  30.         $string  = join " ", @{$obj->{'smartResult'}->{"entries"}};
  31.     };
  32.     $trans = "$trans\n其他结果:$string" if $string;
  33.     print $trans."\n" // "Not found\n";
  34. }
复制代码
脚本的详细解释请参考原文。
作者: PakTC    时间: 2014-1-11 10:42

修改了下,
不管保存为ANSI、还是UTF-8、UTF-16LE UTF-16BE 都可以正确显示为CP936规范的文本。
就是不知道有没有更简单的辨别方法?
  1. #! /usr/bin/perl
  2. # 学习perl LWP时用post做的翻译小脚本
  3. # 调用的是有道词典
  4. # 作者:第2012位菜鸟
  5. # 原文链接 http://www.cnblogs.com/caibird/archive/2013/03/22/2974999.html
  6. # 2014-01-10 增加编码判断+按CP936规范输出,适合在windows命令行显示 - paktc
  7. use strict;
  8. use warnings;
  9. use LWP::UserAgent;
  10. use JSON ;
  11. use Encode;
  12. #use Data::Dumper;
  13. my $mode=recogn();
  14. binmode(STDOUT,':encoding(CP936)');
  15. my $browser = LWP::UserAgent->new();
  16. print "Please input the word:";
  17. chomp (my $input = <STDIN>);
  18. my $response = $browser->post(
  19. #    'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=https://www.google.com.hk/',
  20.     'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null',
  21.     [
  22.         'type' => 'AUTO',
  23.         'i' => "$input",
  24.         'doctype' => 'json',
  25.     ],
  26.     );
  27. if($response->is_success){
  28.     my $result = $response->content;
  29.     my $json = new JSON;
  30.     my $obj = $json->decode($result);
  31.     #print Dumper $obj;
  32.     my $trans = @{$obj->{'translateResult'}[0]}[0]->{"tgt"};
  33.     my $string;
  34.     eval{
  35.         $string  = join " ", @{$obj->{'smartResult'}->{"entries"}};
  36.     };
  37.     my $say1=decode($mode,"翻译结果:");
  38.     my $say2=decode($mode,"\n其他结果: ");
  39.     $trans=decode('UTF-8',$trans) if $trans;
  40.     $string=decode('UTF-8',$string) if $string;
  41.     print $say1, $trans, $say2, $string, "\n";
  42. }
  43. <STDIN>;
  44. # 判断当前脚本编码格式  仅在WIN32中文系统测试过
  45. sub recogn {
  46.     my $cn="中";
  47.     my $code;
  48.     my @arr=split("",$cn);
  49.     if ($#arr == 0) {            # 'Unicode' 4e2d
  50.         $code='Unicode';
  51.     } elsif ($#arr == 1) {       # 'GBK'   d6 d0
  52.         $code='GBK';
  53.     } elsif ($#arr == 2) {       # 'UTF-8' e4 b8 ad
  54.         $code='UTF-8';
  55.     } else {
  56.         $code='WHAT?';
  57.     }
  58. }
复制代码

作者: PowerShell    时间: 2014-1-11 12:16

1 看了半天 不知道干嘛使的,有何用处?! ----根本不说
2 和powershell语法至少有40%相似
作者: PakTC    时间: 2014-1-11 12:49

1 看了半天 不知道干嘛使的,有何用处?! ----根本不说
2 和powershell语法至少有40%相似
PowerShell 发表于 2014-1-11 12:16



    标题都不会看跑到论坛耍?
作者: PakTC    时间: 2014-1-11 13:05

有一个更直接的办法是:
将下面两个明文字符
    my $say1=decode($mode,"翻译结果:");
    my $say2=decode($mode,"\n其他结果:");
改为unicode码的形式表达,这样就不需要判断脚本本身是什么编码
  1. #! /usr/bin/perl
  2. # 学习perl LWP时用post做的翻译小脚本
  3. # 调用的是有道词典
  4. # 作者:第2012位菜鸟
  5. # 原文链接 http://www.cnblogs.com/caibird/archive/2013/03/22/2974999.html
  6. # 2014-01-10 增加编码判断+按CP936规范输出,适合在windows命令行显示 - paktc
  7. use strict;
  8. use warnings;
  9. use LWP::UserAgent;
  10. use JSON ;
  11. use Encode;
  12. #use Data::Dumper;
  13. binmode(STDOUT,':encoding(CP936)');
  14. my $browser = LWP::UserAgent->new();
  15. print "Please input the word:";
  16. chomp (my $input = <STDIN>);
  17. my $response = $browser->post(
  18. #    'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=https://www.google.com.hk/',
  19.     'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null',
  20.     [
  21.         'type' => 'AUTO',
  22.         'i' => "$input",
  23.         'doctype' => 'json',
  24.     ],
  25.     );
  26. if($response->is_success){
  27.     my $result = $response->content;
  28.     my $json = new JSON;
  29.     my $obj = $json->decode($result);
  30.     #print Dumper $obj;
  31.     my $trans = @{$obj->{'translateResult'}[0]}[0]->{"tgt"};
  32.     my $string;
  33.     eval{
  34.         $string  = join " ", @{$obj->{'smartResult'}->{"entries"}};
  35.     };
  36.     my $say1="\x{7ffb}\x{8bd1}\x{7ed3}\x{679c}\x{ff1a}";
  37.     my $say2="\x{5176}\x{4ed6}\x{7ed3}\x{679c}\x{ff1a}";
  38.     $trans=decode('UTF-8',$trans) if $trans;
  39.     $string=decode('UTF-8',$string) if $string;
  40.     print $say1, $trans, "\n", $say2, $string, "\n";
  41. }
  42. <STDIN>;
复制代码

作者: PowerShell    时间: 2014-1-11 13:28

-------[转]perl使用LWP模块写的翻译小程序------------
从标题
1 我看不出能翻译单词还是句子,还是翻译网页,还是文档翻译。
2 我看不出此脚本可以 从哪种语言到那种语言的翻译。
3 只要是翻译,必然涉及上述2问题,所以我把此贴标题鉴定为差,建议此版版主勒令其更改标题,或者要求其在脚本头增加注释,以说明上述2问题。
作者: PowerShell    时间: 2014-1-11 13:29

-------[转]perl使用LWP模块写的翻译小程序------------
从上述标题中:
1 我看不出能翻译单词还是句子,还是翻译网页,还是文档翻译。
2 我看不出此脚本可以 从哪种语言到那种语言的翻译。
3 只要是翻译,必然涉及上述2问题,所以我把此贴标题鉴定为差,建议此版版主勒令其更改标题,或者要求其在脚本头增加注释,以说明上述2问题。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2