文档章节

谷歌百度翻译器

IT周见智
 IT周见智
发布于 2015/06/05 17:18
字数 800
阅读 5
收藏 0
点赞 0
评论 0

目录

说明

由于项目需要,我整理了网上一些跟在线翻译有关的资料,做了一个整合Google和百度翻译的Demo程序。大概工作就是将Google翻译和百度翻译的Web在线版本功能移植PC客户端,用的是它们提供的一些翻译API(非付费)。功能简单,原理也不复杂,记下来希望能够帮助一些人。以下是截图:

设计

“麻雀虽小五脏俱全”,由于支持两种翻译方式,所以可以将一些共性抽象出来,放在一个独立的接口当中(假如以后扩展更多种翻译方式,也会方便很多)。我们定义一个“翻译接口”ITranslator,负责翻译的两个类分别为GoogleTranslator和BaiduTranslator。ITranslator接口代码如下:

 1  /// <summary>
 2  /// 翻译器接口  所有翻译器必须实现该接口
 3  /// </summary>
 4  interface ITranslator
 5  {
 6         /// <summary>
 7         /// 翻译方法
 8         /// </summary>
 9         /// <param name="srcTxt"></param>
10         /// <param name="srcLanguage"></param>
11         /// <param name="desLanguage"></param>
12         /// <returns></returns>
13         string TranslateText(string srcTxt, string srcLanguage, string desLanguage);
14         /// <summary>
15         /// 翻译结果发音URL
16         /// </summary>
17         string TranslateSpeechURL
18         {
19             get;
20         }
21         /// <summary>
22         /// 所有支持的语言
23         /// </summary>
24         List<string> AllSupportedLanguages
25         {
26             get;
27         }
28         /// <summary>
29         /// 本次翻译耗时
30         /// </summary>
31         double TranslateTime
32         {
33             get;
34         }
35  }

两个翻译类(GoogleTranslator和BaiduTranslator)均实现该接口。UI界面直接依赖于ITranslator接口,不会直接依赖于两个具体的翻译类:

以上是“依赖倒置原则”最简单的应用场合。

使用

使用很简单,定义一个ITranslator接口即可:

 1 itranslator = new GoogleTranslator();
 2 //翻译
 3 string translated_string = itranslator.TranslateText("我是一个地球人 ——来自Google的翻译", "中文", "英语");
 4 //翻译结果朗读URL
 5 string speechURL = itranslator.TranslateSpeechURL;
 6 //翻译耗时(毫秒)
 7 int translate_time = (int)itranslator.TranslateTime;
 8 
 9 itranslator = new BaiduTranslator();
10 //翻译
11 translated_string = itranslator.TranslateText("我是一个地球人 ——来自百度的翻译", "中文", "德语");
12 //翻译结果朗读URL
13 speechURL = itranslator.TranslateSpeechURL;
14 //翻译耗时(毫秒)
15 translate_time = (int)itranslator.TranslateTime;

后续如果有更多种翻译方式,可以参照GoogleTranslator和BaiduTranslator的实现。具体代码我就不贴了,源码中注释很详细。请求Web Server时用到了WebClient和WebRequest/WebResponse(前者较后者更高层、更抽象)。

已知缺陷

  • 由于有些词语并没有得到支持,所以翻译的朗读效果并不太好。
  • 而且程序中是通过“http://tts.baidu.com/text2audio?lan=zh&ie=UTF-8&text=博客园”这种方式去加载音频文件的,如果语句太长,官方web版本中是分多次加载音频数据,但是程序中并没有做如此处理,所以可能抛出异常。
  • 另外,音频是通过一个简单的WebBrowser控件加载的,在有些环境中,并不能直接朗读,需要打开系统自带的media palyer进行播放。
  • 程序中在解析服务器返回来的Json数据时,并不严格(可以说是很随便)。建议实际使用过程中,可以采用专门的JSON解析工具。

源码地址

http://files.cnblogs.com/files/xiaozhi_5638/Translator.rar

© 著作权归作者所有

共有 人打赏支持
IT周见智

IT周见智

粉丝 10
博文 61
码字总数 185891
作品 0
西青
主流机器翻译系统(谷歌、百度、搜狗)对比测评(2018年4月)

你也许听过这样的论调:“人工智能将取代人工翻译”,这并不是噱头,事实上这一天的到来已经越来越近了。由此带来的好处是显而易见的,相比于寻求专业的人工翻译,更多的人将能享受到廉价且优...

程序师 ⋅ 05/26 ⋅ 0

响铃:当AI翻译能识别“语境”,我们的“地球村”梦想就不远了

     文|曾响铃   来源|科技向令说(xiangling0815)   《圣经.旧约》里记载着这样一段故事:   当时人类联合起来兴建希望能通往天堂的高塔,为了阻止人类的计划,上帝让人类说不同...

深度学习 ⋅ 06/08 ⋅ 0

八款主流浏览器的“杀手级”功能

本文将对比八种国内最常用的PC浏览器,找出它们各自的亮点以及“杀手级”功能,所有浏览器都是基于Windows平台。和杀毒软件不一样,浏览器之间虽然也竞争激烈,却不存在兼容性的问题,因此以...

红薯 ⋅ 2011/12/07 ⋅ 35

Wox一款国产开源的快捷启动器辅助工具神器

     前言   如果你也不喜欢电脑桌面上满是程序的快捷方式,如果你也喜欢博主这样干干净净的桌面,甚至喜欢高效的键盘操作,那么你需要一款好用的快速启动器软件。   今天推荐一款国...

后端编程嘟 ⋅ 2017/03/15 ⋅ 0

机器翻译引擎的基本原理 ——LSTM

机器翻译引擎的基本原理 摘自:infoq 谷歌机器翻译 Zero-shot:零次 Training:训练 Google Neural Machine Translation:谷歌神经机器翻译 我们每天都在使用不同的技术,但却不知道它们的工...

桃子红了呐 ⋅ 2017/11/15 ⋅ 0

谷歌中国声明:关闭音乐搜索服务旨在更专注

[导读]谷歌中国称,谷歌的目标是简化和改善用户的使用体验,将更多的资源投入到具有更高影响力、改善数十亿人生活的产品中。 9月21日消息,谷歌中国今日就关闭音乐搜索服务一事做出回应,称这...

oschina ⋅ 2012/09/21 ⋅ 15

几行代码为自己的网站添加划词翻译功能

为网站添加自动翻译网页、网页划词、在线翻译、在线词典、每日一句功能。  适合各类网站  百变语种,自动翻译网页   把中文的网站,变成十几种不同语种的网站,会不会感觉很新奇? 要实...

crossmix ⋅ 2015/04/26 ⋅ 1

翻译工具差距,同时也能学习英文

今天突然想到开发人员,在对程序进行命名的时候,英文能力水平的重要性,看源码时,还是看不懂写得啥意思,然后借助百度和谷歌翻译,看看翻译都啥内容,感觉百度还真是不行,硬邦邦的! 1.7并...

u012557298 ⋅ 03/18 ⋅ 0

日常生活小技巧 -- 玩转 PDF

一、PDF 翻译 芯片手册、用户手册等多是PDF文件,多是英文的。下面介绍一下,如何将英文的 pdf 翻译为中文的。 百度搜索到的翻译网页大多是需要付费的。那么免费的应该用什么呢? 推荐,谷歌...

qq_29350001 ⋅ 2017/12/11 ⋅ 0

推荐一个博客

weicq2000的RFC标准翻译 转载▼ 本人利用部分时间翻译RFC标准,挂在“百度文库”和“CSDN”网站上,可通过“百度”、“谷歌”搜索引擎,输入RFC5569(中文)、或RFC4443(中文)、或RFC4861(中文...

zmx009 ⋅ 2012/07/14 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

tcp/ip详解-链路层

简介 设计链路层的目的: 为IP模块发送和接收IP数据报 为ARP模块发送ARP请求和接收ARP应答 为RARP模块发送RARP请求和接收RARP应答 TCP/IP支持多种链路层协议,如以太网、令牌环往、FDDI、RS-...

loda0128 ⋅ 今天 ⋅ 0

spring.net aop代码例子

https://www.cnblogs.com/haogj/archive/2011/10/12/2207916.html

whoisliang ⋅ 今天 ⋅ 0

发送短信如何限制1小时内最多发送11条短信

发送短信如何限制1小时内最多发送11条短信 场景: 发送短信属于付费业务,有时为了防止短信攻击,需要限制发送短信的频率,例如在1个小时之内最多发送11条短信. 如何实现呢? 思路有两个 截至到当...

黄威 ⋅ 昨天 ⋅ 0

mysql5.7系列修改root默认密码

操作系统为centos7 64 1、修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动时不对密码进行验证 2、重启 mysqld 服务:systemctl restart mysql...

sskill ⋅ 昨天 ⋅ 0

Intellij IDEA神器常用技巧六-Debug详解

在调试代码的时候,你的项目得debug模式启动,也就是点那个绿色的甲虫启动服务器,然后,就可以在代码里面断点调试啦。下面不要在意,这个快捷键具体是啥,因为,这个keymap是可以自己配置的...

Mkeeper ⋅ 昨天 ⋅ 0

zip压缩工具、tar打包、打包并压缩

zip 支持压缩目录 1.在/tmp/目录下创建目录(study_zip)及文件 root@yolks1 study_zip]# !treetree 11└── 2 └── 3 └── test_zip.txt2 directories, 1 file 2.yum...

蛋黄Yolks ⋅ 昨天 ⋅ 0

聊聊HystrixThreadPool

序 本文主要研究一下HystrixThreadPool HystrixThreadPool hystrix-core-1.5.12-sources.jar!/com/netflix/hystrix/HystrixThreadPool.java /** * ThreadPool used to executed {@link Hys......

go4it ⋅ 昨天 ⋅ 0

容器之上传镜像到Docker hub

Docker hub在国内可以访问,首先要创建一个账号,这个后面会用到,我是用126邮箱注册的。 1. docker login List-1 Username不能使用你注册的邮箱,要用使用注册时用的username;要输入密码 ...

汉斯-冯-拉特 ⋅ 昨天 ⋅ 0

SpringBoot简单使用ehcache

1,SpringBoot版本 2.0.3.RELEASE ①,pom.xml <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELE......

暗中观察 ⋅ 昨天 ⋅ 0

Spring源码解析(八)——实例创建(下)

前言 来到实例创建的最后一节,前面已经将一个实例通过不同方式(工厂方法、构造器注入、默认构造器)给创建出来了,下面我们要对创建出来的实例进行一些“加工”处理。 源码解读 回顾下之前...

MarvelCode ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部