python实现在线翻译功能


Posted in Python onMarch 03, 2020

对于需要大量翻译的数据,人工翻译太慢,此时需要使用软件进行批量翻译。

1.使用360的翻译

def fanyi_word_cn(string):
 url="https://fanyi.so.com/index/search"
 #db_path = './db/tasks.db'
 Form_Data= {}
 
 #这里输入要翻译的英文
 Form_Data['query']= string
 Form_Data['eng']= '1'
 
 #用urlencode把字典变成字符串,#服务器不接受字典,只接受字符串和二进制
 data= parse.urlencode(Form_Data).encode('utf-8')
 
 #改成服务器可识别的数据后,请求,获取回应数据
 response= request.urlopen(url, data)
 
 html= response.read().decode("utf-8")#解码方式
 
 #java中的对象(集合)和数组(元素为集合),loads可转Python字典
 result= json.loads(html)
 
 #字典调取键名data下的键名fanyi,获取其值
 translate_result= result["data"]["fanyi"]
 #print(translate_result)
 return translate_result

2.使用Google自带的API来翻译

注意,需要安装API模块即可。

pip install translator

#google api, per 1000 words everyday
def translate_cn_api(content):
 translator= Translator(to_lang="zh")
 translation = translator.translate(content)
 return translation

3.使用Google翻译来做,是由于Google提供的API有字节限制,每天只能翻译1000字。

备注:环境准备

3.1 java环境

3.2 安装execjs模块

pip install PyExecJS

3.3 两个实现模块

HandleJs.py

#coding=utf-8
import execjs
 
class Py4Js(): 
 
 def __init__(self): 
 self.ctx = execjs.compile(""" 
 function TL(a) { 
 var k = ""; 
 var b = 406644; 
 var b1 = 3293161072; 
  
 var jd = "."; 
 var $b = "+-a^+6"; 
 var Zb = "+-3^+b+-f"; 
 
 for (var e = [], f = 0, g = 0; g < a.length; g++) { 
  var m = a.charCodeAt(g); 
  128 > m ? e[f++] = m : (2048 > m ? e[f++] = m >> 6 | 192 : (55296 == (m & 64512) && g + 1 < a.length && 56320 == (a.charCodeAt(g + 1) & 64512) ? (m = 65536 + ((m & 1023) << 10) + (a.charCodeAt(++g) & 1023), 
  e[f++] = m >> 18 | 240, 
  e[f++] = m >> 12 & 63 | 128) : e[f++] = m >> 12 | 224, 
  e[f++] = m >> 6 & 63 | 128), 
  e[f++] = m & 63 | 128) 
 } 
 a = b; 
 for (f = 0; f < e.length; f++) a += e[f], 
 a = RL(a, $b); 
 a = RL(a, Zb); 
 a ^= b1 || 0; 
 0 > a && (a = (a & 2147483647) + 2147483648); 
 a %= 1E6; 
 return a.toString() + jd + (a ^ b) 
 }; 
 
 function RL(a, b) { 
 var t = "a"; 
 var Yb = "+"; 
 for (var c = 0; c < b.length - 2; c += 3) { 
  var d = b.charAt(c + 2), 
  d = d >= t ? d.charCodeAt(0) - 87 : Number(d), 
  d = b.charAt(c + 1) == Yb ? a >>> d: a << d; 
  a = b.charAt(c) == Yb ? a + d & 4294967295 : a ^ d 
 } 
 return a 
 } 
 """) 
  
 def getTk(self,text): 
 return self.ctx.call("TL",text)

main.py

#coding=utf-8
#import urllib.request
import urllib2
from HandleJs import Py4Js 
from translate import Translator
import requests
 
# Example: find_last('aaaa', 'a') returns 3
# Make sure your procedure has a return statement.
def find_last(string,str):
 last_position=-1
 while True:
 position=string.find(str,last_position+1)
 if position==-1:
  return last_position
 last_position=position
 
def open_url(url): 
 headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'} 
 req = urllib2.Request(url = url,headers=headers) 
 response = urllib2.urlopen(req) 
 data = response.read().decode('utf-8') 
 return data 
 
def translate_core(content,tk, language): 
 if len(content) > 4891: 
 print("too long byte >4891")
 return
 
 content = urllib2.quote(content) 
 
 if language == 'de':
 url = "http://translate.google.cn/translate_a/single?client=t"+ "&sl=de&tl=zh-CN&hl=zh-CN&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca"+"&dt=rw&dt=rm&dt=ss&dt=t&ie=UTF-8&oe=UTF-8&clearbtn=1&otf=1&pc=1"+"&srcrom=0&ssel=0&tsel=0&kc=2&tk=%s&q=%s"%(tk,content) 
 else:
 url = "http://translate.google.cn/translate_a/single?client=t"+ "&sl=en&tl=zh-CN&hl=zh-CN&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca"+"&dt=rw&dt=rm&dt=ss&dt=t&ie=UTF-8&oe=UTF-8&clearbtn=1&otf=1&pc=1"+"&srcrom=0&ssel=0&tsel=0&kc=2&tk=%s&q=%s"%(tk,content) 
 
 #result为json格式
 result = open_url(url) 
 #print('results:' + result)
 
 if len(content) < 10:
 end = result.find("\",") 
 if end > 4: 
  return result[4:end]
 else:
 result_all = ''
 if language == 'de':
  result_all = result.split(',null,"de",null,null,')[0].replace('[[', '').replace(']]', ']')[1:]
 else:
  result_all = result.split(',null,"en",null,null,')[0].replace('[[', '').replace(']]', ']')[1:]
 
 #print('result_all:' + result_all)
 
 output_cn = ''
 #解析中文字段并拼接
 list = result_all.split('],[')
 for i in range(len(list)-1):
  end = list[i].find("\",")
  tmp_buf = list[i][1:end]
  output_cn = output_cn + tmp_buf
 return output_cn
 
def translate_normal(content, language): 
 js = Py4Js() 
 
 tk = js.getTk(content)
 #print('english:' + content)
 cn_buf = translate_core(content,tk, language)
 
 #print('Chinese:' + cn_buf)
 return cn_buf
 
def translate_cn(content, language):
 LEN_LIMIT = 4891
 all_len = len(content)
 print('en:' + content)
 if all_len > LEN_LIMIT:
 content_cn = ''
 while True:
  content_limit = content[0:LEN_LIMIT]
  limit_end = find_last(content_limit, '.') + 1
  #print('limit_end:' + str(limit_end))
  if limit_end == 0:
  limit_end = find_last(content_limit, ' ') + 1
  if limit_end == 0:
   limit_end = LEN_LIMIT
  content_en = content[0:limit_end]
  leave_len = all_len - limit_end
  if content_en == '':
  break;
  #print('content_en:' + content_en)
  content_cn = content_cn + translate_normal(content_en, language);
  content = content[limit_end:]
 
 return content_cn
 else:
 return translate_normal(content, language)
 
#google api, per 1000 words everyday
def translate_cn_api(content):
 translator= Translator(to_lang="zh")
 translation = translator.translate(content)
 return translation
 
if __name__ == "__main__": 
 content = """Beautiful is better than ugly.
 Explicit is better than implicit.
 Simple is better than complex.
 Complex is better than complicated.
 Namespaces are one honking great idea -- let's do more of those!"""
 
 #
 content = """ 
 IT-Grundschutz M5.131: Absicherung von IP-Protokollen unter Windows Server 2003."""
 #content = 'High'
 content = """Beautiful is better than ugly.
 Explicit is better than implicit.
 Simple is better than complex.
 Complex is better than complicated.
 Namespaces are one honking great idea -- let's do more of those!"""
 language = 'en'
 
 test = translate_cn(content.replace('\n', ''), language)
 print('ok:' + test)
 
 #content = 'Checks version'

此处实现了德语翻译成中文和英文翻译成中文。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Pyhthon中使用compileall模块编译源文件为pyc文件
Apr 28 Python
使用Python写一个贪吃蛇游戏实例代码
Aug 21 Python
Python多图片合并PDF的方法
Jan 03 Python
python opencv摄像头的简单应用
Jun 06 Python
python实现控制电脑鼠标和键盘,登录QQ的方法示例
Jul 06 Python
使用Bazel编译TensorBoard教程
Feb 15 Python
Python requests设置代理的方法步骤
Feb 23 Python
python多线程实现同时执行两个while循环的操作
May 02 Python
virtualenv介绍及简明教程
Jun 23 Python
解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题
Jul 13 Python
Lombok插件安装(IDEA)及配置jar包使用详解
Nov 04 Python
Jupyter Notebook添加代码自动补全功能的实现
Jan 07 Python
Python configparser模块配置文件过程解析
Mar 03 #Python
Python生成六万个随机,唯一的8位数字和数字组成的随机字符串实例
Mar 03 #Python
Django CSRF认证的几种解决方案
Mar 03 #Python
python实现电子词典
Mar 03 #Python
python关于变量名的基础知识点
Mar 03 #Python
python生成13位或16位时间戳以及反向解析时间戳的实例
Mar 03 #Python
python 插入日期数据到Oracle实例
Mar 02 #Python
You might like
水质对咖图啡风味的影响具体有哪些
2021/03/03 冲泡冲煮
用PHP和ACCESS写聊天室(四)
2006/10/09 PHP
php IP转换整形(ip2long)的详解
2013/06/06 PHP
php使用正则过滤js脚本代码实例
2014/05/10 PHP
使用phpexcel类实现excel导入mysql数据库功能(实例代码)
2016/05/12 PHP
php array_map使用自定义的函数处理数组中的每个值
2016/10/26 PHP
PHP开发的文字水印,缩略图,图片水印实现类与用法示例
2019/04/12 PHP
强悍无比的WEB开发好助手FireBug(Firefox Plugin)
2007/01/16 Javascript
javascript String 的扩展方法集合
2008/06/01 Javascript
JavaScript中的prototype使用说明
2010/04/13 Javascript
jquery弹出层类代码分享
2013/12/27 Javascript
Jquery实现地铁线路指示灯提示牌效果的方法
2015/03/02 Javascript
轻松实现JavaScript图片切换
2016/01/12 Javascript
jquery实现跳到底部,回到顶部效果的简单实例(类似锚)
2016/07/10 Javascript
JavaScript实现点击按钮复制指定区域文本(推荐)
2016/11/25 Javascript
详解Angular 4 表单快速入门
2017/06/05 Javascript
JavaScript中三个等号和两个等号你了解多少
2017/07/04 Javascript
JavaScript实现计数器基础方法
2017/10/10 Javascript
react中实现搜索结果中关键词高亮显示
2018/07/31 Javascript
nodejs中express入门和基础知识点学习
2018/09/13 NodeJs
Node.js模拟发起http请求从异步转同步的5种用法
2018/09/26 Javascript
Vue中ref和$refs的介绍以及使用方法示例
2021/01/11 Vue.js
python计算文本文件行数的方法
2015/07/06 Python
学习python之编写简单简单连接数据库并执行查询操作
2016/02/27 Python
使用Python &amp; Flask 实现RESTful Web API的实例
2017/09/19 Python
Django项目中model的数据处理以及页面交互方法
2018/05/30 Python
python关于矩阵重复赋值覆盖问题的解决方法
2019/07/19 Python
深度学习入门之Pytorch 数据增强的实现
2020/02/26 Python
Python机器学习工具scikit-learn的使用笔记
2021/01/28 Python
CSMA/CD介质访问控制协议
2015/11/17 面试题
社区党务公开实施方案
2014/03/18 职场文书
合伙经营协议书范本
2014/09/13 职场文书
学校开除通知书
2015/04/25 职场文书
上诉状格式
2015/05/23 职场文书
JavaScript实现优先级队列
2021/12/06 Javascript
DSP接收机前端设想
2022/04/05 无线电