1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Python 小工具:调用「百度翻译API」实现英汉互译及多语言翻译

Python 小工具:调用「百度翻译API」实现英汉互译及多语言翻译

时间:2018-10-13 11:25:01

相关推荐

Python 小工具:调用「百度翻译API」实现英汉互译及多语言翻译

Python 小工具:调用「百度翻译 API」实现英汉互译及多语言翻译API 简介过程详解完整代码结果展示附:官方 Demo - Python 2 版本

Python 小工具:调用「百度翻译 API」实现英汉互译及多语言翻译

官方 Demo 是 Python 2 版本的,笔者基于 Python 3 实现,并简化请求翻译结果的过程、扩展功能

前段时间写的小脚本,得空整理一下和大家交流学习

API 简介

什么是百度翻译开放平台?

百度翻译开放平台是百度翻译面向广大开发者提供开放服务的平台。服务涵盖:通用翻译API、定制化翻译API、语音翻译SDK、拍照翻译SDK等,并持续更新中。通用翻译 API

通用翻译API支持28种语言互译,覆盖中、英、日、韩、西、法、泰、阿、俄、葡、德、意、荷、芬、丹等;支持28种语言的语种检测。您只需调用通用翻译API,传入待翻译的内容,并指定要翻译的源语言(支持源语言语种自动检测)和目标语言,即可得到相应的翻译结果。任何第三方应用或网站都可以通过使用通用翻译API为用户提供实时优质的多语言翻译服务,提升产品体验。语种识别 API

语种识别API可识别给出文本的语种,并返回识别结果。首批支持中文、英语、日语、韩语、泰语、越南语等六个语种的语种识别。

摘自官网介绍,官网还有更多高级(shou fei)功能的介绍,可移步了解详情 →

过程详解

通用翻译 API 采用全流程自助申请的模式:

点击网站上方的“登录”按钮,以百度账号登录平台;

在产品服务页面点击“立即使用”,按照页面提示信息注册成为开发者,即可获得APPID和密钥信息。

首先需要去百度翻译开放平台注册为开发者、申请通用翻译 APIAPI Key。通过 HTTP 接口调用通用翻译 API,传入待翻译的内容,并指定要翻译的源语言和目标语言种类,就可以得到相应的翻译结果。向通用翻译 API HTTP 地址:http://api./api/trans/vip/translate 通过POST或GET方法发送下列字段即可访问服务:

语言列表:(源语言语种不确定时可设置为 auto,目标语言语种不可设置为 auto)

其中,sign是使用 MD5 算法生成的一段长度为 32位的字符串,具体方法如下: 1.准备好请求参数中的 appid、q、salt 以及平台分配的密钥;2.按照appid+q+salt+密钥的顺序拼接得到字符串1;3.对字符串1计算 MD5 值即可得到32位小写的sign。 返回结果是json格式,包含以下字段:(其中 trans_result 包含了 src 和 dst 字段)

例如:

{"from":"en","to":"zh","trans_result":[{"src":"apple","dst":"苹果"}]}

只要取出dst键对应的值即是翻译结果。

完整代码

"""调用「百度翻译 API」实现英汉互译及多语言翻译@Author: Newyee@Python: 3.6.5@Create: -04-18"""# 导入相关模块import hashlibimport randomimport requests# 你的 APP IDappID = 'xxx'# 你的密钥secretKey = 'xxx'# 百度翻译 API 的 HTTP 接口apiURL = 'http://api./api/trans/vip/translate'def baiduAPI_translate(query_str, to_lang):'''传入待翻译的字符串和目标语言类型,请求 apiURL,自动检测传入的语言类型获得翻译结果:param query_str: 待翻译的字符串:param to_lang: 目标语言类型:return: 翻译结果字典'''# 生成随机的 salt 值salt = str(random.randint(32768, 65536))# 准备计算 sign 值需要的字符串pre_sign = appID + query_str + salt + secretKey# 计算 md5 生成 signsign = hashlib.md5(pre_sign.encode()).hexdigest()# 请求 apiURL 所有需要的参数params = {'q': query_str,'from': 'auto','to': to_lang,'appid': appID,'salt':salt,'sign': sign}try:# 直接将 params 和 apiURL 一起传入 requests.get() 函数response = requests.get(apiURL, params=params)# 获取返回的 json 数据result_dict = response.json()# 得到的结果正常则 returnif 'trans_result' in result_dict:return result_dictelse:print('Some errors occured:\n', result_dict)except Exception as e:print('Some errors occured: ', e)def baiduAPI_translate_main(query_str, dst_lang=''):'''解析翻译结果后输出,默认实现英汉互译:param query_str: 待翻译的字符串,必填:param dst_lang: 目标语言类型,可缺省:return: 翻译后的字符串'''if dst_lang:# 指定了目标语言类型,则直接翻译成指定语言result_dict = baiduAPI_translate(query_str, dst_lang)else:# 未指定目标语言类型,则默认进行英汉互译result_dict = baiduAPI_translate(query_str, 'zh')if result_dict['from'] == 'zh':result_dict = baiduAPI_translate(query_str, 'en')# 提取翻译结果字符串,并输出返回dst = result_dict['trans_result'][0]['dst']print('{}: {} -> {}: {}'.format(result_dict['from'], query_str, result_dict['to'], dst))return dstif __name__ == '__main__':baiduAPI_translate_main('This is English.')baiduAPI_translate_main('这是中文')baiduAPI_translate_main('翻译成法语', 'fra')

结果展示

附:官方 Demo - Python 2 版本

#/usr/bin/env python#coding=utf8import httplibimport md5import urllibimport randomappid = '' #你的appidsecretKey = '' #你的密钥httpClient = Nonemyurl = '/api/trans/vip/translate'q = 'apple'fromLang = 'en'toLang = 'zh'salt = random.randint(32768, 65536)sign = appid+q+str(salt)+secretKeym1 = md5.new()m1.update(sign)sign = m1.hexdigest()myurl = myurl+'?appid='+appid+'&q='+urllib.quote(q)+'&from='+fromLang+'&to='+toLang+'&salt='+str(salt)+'&sign='+signtry:httpClient = httplib.HTTPConnection('api.')httpClient.request('GET', myurl)#response是HTTPResponse对象response = httpClient.getresponse()print response.read()except Exception, e:print efinally:if httpClient:httpClient.close()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。