🐍 Python 翻译文本的几种方案。

0. 调用 googletrans 库

0.1 安装:

  1. $ pip install googletrans

0.2 调用:

  1. from googletrans import Translator
  2. # 中 -> 英
  3. print(translator_google.translate('你好,世界!', dest='en').text)
  4. # 英 -> 中
  5. print(translator_google.translate('Hello World!', dest='zh-CN').text)

完整使用请参考:py-translate · pypi

0.3 报错:

不出意外的话,在使用过程中会出现连接超时等报错,这是因为它默认调用的接口在墙外,我们需要手动修改模块的源码把translate.google.com修改为translate.google.cn。具体操作如下: 分别打开/Python路径/Lib/site-packages/googletrans中的gtoken.pyurls.pyclient.py,把这三个文件中的translate.google.com修改为translate.google.cn即可。

0.4 笔记:

谷歌翻译一次最多5000字符,大概就是500个单词,20-30句话左右,每次翻译时间1s以内,所以如果翻译的文本较长,建议拆分为5000个字符一段一段的来翻译,并使用多线程,能大幅度提升翻译效率。

1. 使用网页接口


这种方法主要是调用百度等平台的翻译接口,需要自行去注册

1.1 导入模块

  1. import re
  2. import urllib.parse, urllib.request
  3. import hashlib
  4. import urllib
  5. import random
  6. import json
  7. import time

1.2 百度翻译

  1. appid = 'your_appid'
  2. secretKey = 'your_secretKey'
  3. url_baidu = 'http://api.fanyi.baidu.com/api/trans/vip/translate'
  4. def translateBaidu(text, f='ja', t='zh'):
  5. salt = random.randint(32768, 65536)
  6. sign = appid + text + str(salt) + secretKey
  7. sign = hashlib.md5(sign.encode()).hexdigest()
  8. url = url_baidu + '?appid=' + appid + '&q=' + urllib.parse.quote(text) + '&from=' + f + '&to=' + t + \
  9. '&salt=' + str(salt) + '&sign=' + sign
  10. response = urllib.request.urlopen(url)
  11. content = response.read().decode('utf-8')
  12. data = json.loads(content)
  13. result = str(data['trans_result'][0]['dst'])
  14. print(result)

参数:text—待翻文本,f—初始语言,t—目标语言,后面方法类似。

1.3 有道翻译

  1. url_youdao = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=' \
  2. 'http://www.youdao.com/'
  3. dict = {}
  4. dict['type'] = 'AUTO'
  5. dict['doctype'] = 'json'
  6. dict['xmlVersion'] = '1.8'
  7. dict['keyfrom'] = 'fanyi.web'
  8. dict['ue'] = 'UTF-8'
  9. dict['action'] = 'FY_BY_CLICKBUTTON'
  10. dict['typoResult'] = 'true'
  11. def translateYoudao(text):
  12. global dict
  13. dict['i'] = text
  14. data = urllib.parse.urlencode(dict).encode('utf-8')
  15. response = urllib.request.urlopen(url_youdao, data)
  16. content = response.read().decode('utf-8')
  17. data = json.loads(content)
  18. result = data['translateResult'][0][0]['tgt']
  19. print(result)

参数主要由字典dict指定,发现没有地方可以指定语言(可能是我没找到),测试结果是不管输入什么语言的文本,输出均是中文。

1.4 谷歌翻译

  1. url_google = 'http://translate.google.cn'
  2. reg_text = re.compile(r'(?<=TRANSLATED_TEXT=).*?;')
  3. user_agent = r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) ' \
  4. r'Chrome/44.0.2403.157 Safari/537.36'
  5. def translateGoogle(text, f='ja', t='zh-cn'):
  6. values = {'hl': 'zh-cn', 'ie': 'utf-8', 'text': text, 'langpair': '%s|%s' % (f, t)}
  7. value = urllib.parse.urlencode(values)
  8. req = urllib.request.Request(url_google + '?' + value)
  9. req.add_header('User-Agent', user_agent)
  10. response = urllib.request.urlopen(req)
  11. content = response.read().decode('utf-8')
  12. data = reg_text.search(content)
  13. result = data.group(0).strip(';').strip('\'')
  14. print(result)

和上面两种方法一样,采用的是访问网页的形式来进行翻译。

1.5 笔记

如果觉得耗时的话可以使用线程,能将翻译速度提升几倍。 本篇部分内容参考自python有哪些好用的语言翻译方法 - 路上的脚印