Python翻译服务

2018-10-21  本文已影响0人  啊阿伟啊

当前常见翻译网站均限制单次搜索字符为5000个(包括标点符号,空格等),这些翻译网站也提供了自己的翻译服务(见附录:主流翻译服务),大家可以按照自己的需要去选择。

本文主要介绍百度通用翻译API的使用和Google翻译API非官方包py-googletrans的使用。

说明:

百度通用翻译API

  1. 在百度翻译开放平台注册成为开发者;
  2. 在管理控制台的开发者信息中找到APP ID密钥
  3. 可以在文档中找到各种语言的demo,使用时需要注意一下,官方Python语言的demo使用的是Python2.7版本,可以按照下表进行包的转换到python3.x版本:
python 2.7 python 3.*
httplib http.client
md5 hashlib.md5
urllib.quote urllib.parse.quote
  1. 更符合python3.x版本的Demo
import hashlib
import random
import urllib
import urllib.parse
import urllib.request

appid = '' #你的appid
secretKey = '' #你的密钥
url = 'http://api.fanyi.baidu.com/api/trans/vip/translate'

query = 'apple'
from_lang = 'en'
to_lang = 'zh'
salt = random.randint(32768, 65536)
sign = appid+query+str(salt)+secretKey
sign = hashlib.md5(sign.encode(encoding='UTF-8')).hexdigest()

values = {
    'q': query,
    'from': from_lang,
    'to': to_lang,
    'appid': appid,
    'salt': salt,
    'sign': sign
}

url_values = urllib.parse.urlencode(values)
full_url = url + '?' + url_values
with urllib.request.urlopen(full_url) as response:
    resp_data = response.read().decode("unicode-escape")
    print(resp_data)

注:最好将搜索结果保存到数据库,防止浪费搜索资源。

Google翻译API(非官方包 py-googletrans)

通过翻译网页爬取翻译内容的难度与复杂度与日俱增,自己写一个爬虫的工作量也越来越大,幸而体有大神已经完成了这项艰巨的工作,py-googletrans就是其中一个,虽然稳定性难以保证,但是可以满足基本的翻译需求,且速度也可以接受。

可以参看API文档使用,简单的翻译使用:

from googletrans import Translator

translator = Translator(service_urls=['translate.google.cn'])
translate = translator.translate("apple", src='en', dest='zh-cn')
print(translate.text)

注意:

使用时遇到的问题

使用时会出现错误:
AttributeError: 'NoneType' object has no attribute 'group'

这个问题已经有人提了https://github.com/ssut/py-googletrans/issues/88

stackoverflow上提供了临时解决方案,https://stackoverflow.com/a/52487148/2231702需要自己修改源码修复:

打开py-googletrans包中的gtoken.py文件,对应代码更新以下代码:

RE_TKK = re.compile(r'TKK=eval\(\'\(\(function\(\)\{(.+?)\}\)\(\)\)\'\);',
                        re.DOTALL)
    RE_RAWTKK = re.compile(r'TKK=\'([^\']*)\';',re.DOTALL)

    def __init__(self, tkk='0', session=None, host='translate.google.com'):
        self.session = session or requests.Session()
        self.tkk = tkk
        self.host = host if 'http' in host else 'https://' + host

    def _update(self):
        """update tkk
        """
        # we don't need to update the base TKK value when it is still valid
        now = math.floor(int(time.time() * 1000) / 3600000.0)
        if self.tkk and int(self.tkk.split('.')[0]) == now:
            return

        r = self.session.get(self.host)

        rawtkk = self.RE_RAWTKK.search(r.text)
        if rawtkk:
            self.tkk = rawtkk.group(1)
            return

或者替换成py_translator

附录

主流翻译服务

服务商 费用 API文档
百度 通用翻译API,每月200万字符免费,超出后按照百万字符为单位收费,详情 通用翻译API技术文档
有道 文本翻译,收费,新注册用户会给100元体验资金,详情 有道智云文本翻译API
Google 翻译服务,收费,详情 API与参考
Microsoft 文本翻译,每月200万字符免费,超出后按照百万字符为单位收费,详情 文本翻译API文档

注:以上数据汇总日期为2018-10-21

来源于:mr-wolverine

上一篇下一篇

猜你喜欢

热点阅读