设为首页 收藏本站
查看: 759|回复: 0

[经验分享] 使用 Google API 进行翻译的 Python 小工具

[复制链接]

尚未签到

发表于 2015-4-26 07:17:38 | 显示全部楼层 |阅读模式
  因为能及时地完成这个小工具,全靠在网上找到一些代码来用,所以,也把自己完成的东西回馈给网络。:)
  之前有这么一个小需求,要大量地翻译一些零散的句子,对于翻译的质量并不在意,直接采用翻译工具的结果就可以了。但是量很大,于是就想着用 Google 的翻译 API 来做。一开始想用 JavaScript 来写的,但由于只会 JavaScript 的对 Google 翻译 API 的异步调用方式,不知道如何才能进行批量的翻译。
  于是决定用 Python 的来实现。先从网上抄了一些现成的代码(主要是参考这篇),但都不能正确地得到结果。由于稍微做了一些修改,使之能正常地运行得到翻译的结果,代码如下:
  
         
import urllib,urllib2
from sgmllib import SGMLParser
class URLLister(SGMLParser):
def __init__(self, result):
SGMLParser.__init__(self)
self.result = result
self.open = False
def start_div(self, attrs):
id = [v for k, v in attrs if k=='id']
if 'tts_button' in id:
self.open = True
def handle_data(self, text):
if self.open:
self.result.append(text)
self.open = False
def Translate(text, f, t):
MySentence = []   
values = {'hl':'zh-CN','ie':'UTF-8',
'text':text,'langpair':"%s|%s"%(f, t)}
url = 'http://translate.google.cn/translate_t'
data = urllib.urlencode(values)
req = urllib2.Request(url, data)
req.add_header('User-Agent', "Mozilla/4.0 (compatible;
MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)")
response = urllib2.urlopen(req)
parser = URLLister(MySentence)
parser.feed(response.read())
parser.close()
return MySentence
def TranlateForIgnorException(text):
excpCnt = 0
while 1:
try:
arStr = Translate(langStr, "en", "ar")[0]
break
except:
excpCnt = excpCnt + 1                    
if excpCnt > 10:
break
time.sleep(2)
return arStr
if __name__ == "__main__":
ArStr = TranlateForIgnorException("This")  函数 Translate (第20行),是模拟浏览器向 google 发出 http 的请求。第一个参数是需要翻译的句子,第二、三个参数是原语言和目标语言,分别是一定预选定义好的字符串(英文是 "en",阿拉伯语是"ar",简体中文是'zh-CN'等),完整的定义在 Google 翻译 API 的文档中有描述。返回值是翻译后的字符串,是 UTF8 的编码。这个函数可以看成是同步的。
  我在使用的时候,把要翻译的句子读入一个 list 中,然后依次进行翻译。连续调用的时候,很容易出现 http 506 错误的异常。我不知道如何正确地处理它,于是我用了另一个函数(第33行)TranlateForIgnorException ,当出现异常时就再进行一次翻译,直到翻译成功为止,或是,异常连续出现 10 次(因为有的句子无法进行翻译,比如,带有"http://"这样网址的字符串)。
  另外一点需要说明的是,原来在网上抄的代码中,解析 html 文件得到翻译后字符串的部分有点问题,问题是在第 13 行代码处,原来的代码是以'result_box' 为标签时进行抽取,但我使用后发现不太对,于是把 google 发回的整个 html 文件存下来,查看后发现,翻译后文字是存在 'tts_button' 为 id 的 div 标签中的。所以我进行了修改,我不保证这个绝对正确,如果您发现有不对的地方,可以试着从这些看看。
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-60674-1-1.html 上篇帖子: python开发_tkinter_窗口控件_自己制作的Python IDEL_博主推荐 下篇帖子: python utf-8 乱码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表