免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5054 | 回复: 13
打印 上一主题 下一主题

Translator.pl 带自我学习功能的翻译工具 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-26 11:34 |只看该作者 |倒序浏览
我的MACFEE过于敏感了,金山词霸因为要注入dll到其他进程,所以被当作病毒拦截。去google网站上查吧,找地址,打开IE又很慢。无奈本人经常需要查字典,所以很麻烦。

干脆自己写个代码,一劳永逸。其实是把google当字典查而已。需要查询某个单词时,第一次会去google上查询,然后保存到本地,之后再查询这个单词时,就从本地读取。本地没有的词条就从google上查。

这有很大的好处就是,虽然代码很短,但可以认为单词量是无限的,呵呵,毕竟有google这么大的词库在。金山不也和他合作了吗?我也死皮赖脸的和他"合作"一下。

代码通过自动“学习”google,词库会逐渐丰富!

还有很大的改动空间,有空还可以多增加些功能。

下面是代码,各位需要用的话拿去用吧。希望能把我的信息留下,大家觉得有必要改进,可以提一下。如果觉得无趣,我也就自己改改自己用了,就不用出来继续搞了。

代码一次发不下,下一贴再贴代码

        S t u d i o u s T r a n s l a t o r
                By Google&Xti9er
         translate.google.com&www.xtiger.net
__________________________________________________
Give me You Word:chinese

++++++++++++++++++++++++++++++++++++++++++++++++++
        Word = < chinese >
        翻译:< 中文 >
--------------------------------------------------
        字典:
                | 名词 |
                        1.汉
                        2.中文
                        3.汉语
                        4.华人
                        5.华语
                | 形容词 |
                        1.中国的
                        2.中国话的
                        3.中华的
Ah! I Googled It!

++++++++++++++++++++++++++++++++++++++++++++++++++
Give me You Word:chinese

++++++++++++++++++++++++++++++++++++++++++++++++++
        Word = < chinese >
        翻译:< chinese=中文 >
--------------------------------------------------
        字典:
                | 名词 |
                        1.汉
                        2.中文
                        3.汉语
                        4.华人
                        5.华语
                | 形容词 |
                        1.中国的
                        2.中国话的
                        3.中华的
Ah! I Remember It!

++++++++++++++++++++++++++++++++++++++++++++++++++
Give me You Word:

[ 本帖最后由 xti9er 于 2009-2-26 11:39 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-02-26 11:35 |只看该作者
#!/usr/local/bin/perl
#By xti9er www.xtiger.net
use IO::Socket::INET;
use Encode qw/encode decode/;
use Encode::CN;
use Color::Output;
Color::Output::Init;

`title  --= S t u d i o u s   T r a n s l a t o r =--`;
cprin("\tS t u d i o u s\tT r a n s l a t o r\n",7);
cprin("\t\tBy Google&Xti9er \n\t translate.google.com&www.xtiger.net\n",13);
my $host="translate.google.com";
print "_"x50,"\n";
START:
cprin("Give me You Word:",13);
my $english=<STDIN>;
until($english)
{
        cprin("\n[!]\tPLs input a word!\n",5);
        goto START;
}

chomp ($english);

until($english and $english=~/[a-z]/i)
{
        cprin("\n[!]\tDon't Fool me, It's Not a word!\n",5);
        goto START;
}

unless(-d "./dic")
{
        cprin("DIC directory not found,make it NOW!\n",5);
        mkdir("./dic") or print $!,"\n";
}

print "\n","+"x50,"\n";
cprin("\tWord = < $english >\n",13);

my $flt=substr($english,0,1);

if(fromlocal($english))
{
        cprin("Ah! I Remember It!\n",13);
}
else
{
        open(LOCALDIC,"+>>./dic/$flt.dic");
        if(fromgoogle($english))
        {
        cprin("Ah! I Googled It!\n",13);
        }
        else
        {
        cprin("So Sorry Get dic failed!\n",13);
        }
        close LOCALDIC;
}

sub fromlocal
{
        my $getword=shift;
    my $lword=length($getword)+1;
        if(-e "./dic/$flt.dic")
        {
                open(LOCALDIC,"./dic/$flt.dic") or (print $! and goto LOCALEND);
                while(my $nowstr=<LOCALDIC>)
                {
                if(substr($nowstr,0,$lword) eq "$getword=")
                {
                    putdic($nowstr);
                    return 1;
                }
                else
                {
                    next;
                }
                }
                close LOCALDIC;
        }

        else
        {
                return 0;
        }
        LOCALEND:
        return 0;
}

sub fromgoogle
{
        my $co=0;
        my $english=shift;
        if($sock=IO::Socket::INET->new(PeerAddr=>$host,PeerPort=>80,Proto=>'tcp'))
        {
                         print $sock "GET /translate_a/t?client=t&text=$english&sl=en&tl=zh-CN&swap=1 HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Referer: http://translate.google.cn/translate_t?hl=zh-CN#en|zh-CN|good
UA-CPU: x86
Accept-Encoding: deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; InfoPath.1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
Host: translate.google.cn
Connection: Keep-Alive
Cookie: PREF=ID=43dee4faa0c164ea:NW=1:TM=1232591661:LM=1232591661:S=QBHliTyaa2tE54Pw; NID=20=JX7tVJE1QRqMtvxmDHY0oUsM93zsUBPNAQaUGm2h-uIC8RYKxl0hDQamcNFagW9rZ7sfTldUdyaQtsGYYgfknMhUOsyaIj3ljNlPJrFWIhWrMg30UO2mKijsFVxcZqX7; __utma=3261045.390960281383473000.1234836497.1235467139.1235527712.12; __utmz=3261045.1235527712.12.9.utmcsr=google.cn|utmccn=(referral)|utmcmd=referral|utmcct=/intl/zh-cn/options/; __utmc=3261045

";

                while($getinfo=(<$sock>))
                {
                        $co++;
                        chomp($getinfo);
                        last if $getinfo=~/404\sNot\sFound/;
                        if ($co==10)
                        {
                                close $sock;
                                print LOCALDIC "$english=$getinfo\n";
                                putdic($getinfo);
                                return 1;
                        }
                }
        }
        else
        {
                cprin("[Connect Fail!] $host:80\n",5);
                return 0;
        }
    return 0;
}

sub putdic
{
        my $dicinfo=shift;
        @pinfo=split(/\,\[/,$dicinfo);

        cprin("\t翻译:< ".utf2gbk($pinfo[0])." >\n",7);
        print "-"x50,"\n";
        cprin("\t字典:\n",11);

        for(1..scalar(@pinfo)-1)
        {
                chomp($pinfo[$_]);
                @dinfo=split(/\,/,$pinfo[$_]);
                cprin("\t\t| ".utf2gbk($dinfo[0])." |\n",11);
                for my $no (1..scalar(@dinfo)-1)
                {
                        chomp($dinfo[$no]);
                        cprin("\t\t\t$no.".utf2gbk($dinfo[$no])."\n",11);
                }
        }
}

print "\n","+"x50,"\n";

goto START;

sub utf2gbk
{
        my $str=shift;
        $str=~ s/\,|\[|\]|\"|//gi;
        my $euc_cn=decode("utf-8", $str);
        my $deuc_cn=encode("GBK", $euc_cn);
        return         $deuc_cn;
}

sub cprin
{
        ($str,$i)=@_;
        cprint("\x03" . $i . "$str\x030");
}

[ 本帖最后由 xti9er 于 2009-2-26 11:37 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2009-02-26 11:44 |只看该作者
cool 顶一个,不过懂perl

论坛徽章:
1
未羊
日期:2014-09-08 22:47:27
4 [报告]
发表于 2009-02-26 11:59 |只看该作者
不错,顶一下。

论坛徽章:
0
5 [报告]
发表于 2009-02-26 12:15 |只看该作者
支持老虎

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
6 [报告]
发表于 2009-02-26 12:18 |只看该作者
原帖由 xti9er 于 2009-2-26 11:34 发表
干脆自己写个代码,一劳永逸。其实是把google当字典查而已。需要查询某个单词时,第一次会去google上查询,然后保存到本地,之后再查询这个单词时,就从本地读取。本地没有的词条就从google上查。

这有很大的好处就是,虽然代码很短,但可以认为单词量是无限的,呵呵,毕竟有google这么大的词库在。金山不也和他合作了吗?我也死皮赖脸的和他"合作"一下。

代码通过自动“学习”google,词库会逐渐丰富!

这个算不得学习吧?只是缓存下上次的结果。

论坛徽章:
0
7 [报告]
发表于 2009-02-26 12:52 |只看该作者
原帖由 MMMIX 于 2009-2-26 12:18 发表

这个算不得学习吧?只是缓存下上次的结果。


注意引号,呵呵。

    本来没词库,到后来有词库。从需要到google获取,到自己读本地,也算是"学习"了吧?

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
8 [报告]
发表于 2009-02-26 13:00 |只看该作者
原帖由 xti9er 于 2009-2-26 12:52 发表


注意引号,呵呵。

    本来没词库,到后来有词库。从需要到google获取,到自己读本地,也算是"学习"了吧?

我所理解的学习,是程序根据其运行过程中获取的信息自动调整其行为的一个过程,例如说 google 的搜索,好像就有一定的学习功能,它会根据你以往的搜索记录,推断你对什么感兴趣,然后据此排序你当前搜索的结果,也就说,即使数据库没有变化,同样的关键词也可能得出不同的搜索结果或结果排序。

论坛徽章:
0
9 [报告]
发表于 2009-02-26 13:31 |只看该作者
原帖由 MMMIX 于 2009-2-26 13:00 发表

我所理解的学习,是程序根据其运行过程中获取的信息自动调整其行为的一个过程,例如说 google 的搜索,好像就有一定的学习功能,它会根据你以往的搜索记录,推断你对什么感兴趣,然后据此排序你当前搜索的结果 ...



OK

我发到这里,也就是看有人愿意关注这个吗,如果大家觉得还值得修改,我再继续。不然依我偷懒的性格,就这样够自己用就完事了。

你说的那些我也考虑过的,只是值不值得去花时间做的问题。

论坛徽章:
0
10 [报告]
发表于 2009-02-26 14:02 |只看该作者
你这样已经够我学习一段了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP