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 相关文章推荐
python网络编程之TCP通信实例和socketserver框架使用例子
Apr 25 Python
Python爬虫实现爬取京东手机页面的图片(实例代码)
Nov 30 Python
详谈在flask中使用jsonify和json.dumps的区别
Mar 26 Python
Python中一行和多行import模块问题
Apr 01 Python
Django项目中用JS实现加载子页面并传值的方法
May 28 Python
python之线程通过信号pyqtSignal刷新ui的方法
Jan 11 Python
Python 绘制酷炫的三维图步骤详解
Jul 12 Python
一文了解python 3 字符串格式化 F-string 用法
Mar 04 Python
python虚拟环境模块venv使用及示例
Mar 04 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
Jul 15 Python
Pycharm自动添加文件头注释和函数注释参数的方法
Oct 23 Python
Python 利用flask搭建一个共享服务器的步骤
Dec 05 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
php中使用parse_url()对网址进行解析的实现代码(parse_url详解)
2012/01/03 PHP
thinkPHP模板引擎用法示例
2016/12/08 PHP
PHP 实现公历日期与农历日期的互转换
2017/09/13 PHP
EasyUI中的tree用法介绍
2011/11/01 Javascript
JQuery判断子iframe何时加载完成解决方案
2013/08/20 Javascript
jquery选择器、属性设置用法经验总结
2013/09/08 Javascript
js冒泡、捕获事件及阻止冒泡方法详细总结
2014/05/08 Javascript
JavaScript sub方法入门实例(把字符串显示为下标)
2014/10/17 Javascript
Nodejs学习笔记之NET模块
2015/01/13 NodeJs
jQuery制作可自定义大小的拼图游戏
2015/03/30 Javascript
JavaScript实现的Tween算法及缓冲特效实例代码
2015/11/03 Javascript
javascript自动切换焦点控制效果完整实例
2016/02/02 Javascript
Node.js+Express配置入门教程详解
2016/05/19 Javascript
AngularJS教程之简单应用程序示例
2016/08/16 Javascript
妙用Angularjs实现表格按指定列排序
2017/06/23 Javascript
javascript流程控制语句集合
2017/09/18 Javascript
Angular实现可删除并计算总金额的购物车功能示例
2017/12/26 Javascript
Vue中的情侣属性$dispatch和$broadcast详解
2019/03/07 Javascript
vue弹出框组件封装实例代码
2019/10/31 Javascript
Vue退出登录时清空缓存的实现
2019/11/12 Javascript
Vue快速实现通用表单验证功能
2019/12/05 Javascript
javascript利用键盘控制小方块的移动
2020/04/20 Javascript
js canvas实现俄罗斯方块
2020/10/11 Javascript
python基于windows平台锁定键盘输入的方法
2015/03/05 Python
一篇文章入门Python生态系统(Python新手入门指导)
2015/12/11 Python
Python实现确认字符串是否包含指定字符串的实例
2018/05/02 Python
python实现将汉字保存成文本的方法
2018/11/16 Python
Python3列表内置方法大全及示例代码小结
2019/05/10 Python
浅谈Python描述数据结构之KMP篇
2020/09/06 Python
Python爬虫之App爬虫视频下载的实现
2020/12/08 Python
前端使用canvas生成盲水印的加密解密的实现
2020/12/16 HTML / CSS
领导班子党的群众路线教育实践活动对照检查材料
2014/09/25 职场文书
公安纪律作风整顿剖析材料
2014/10/10 职场文书
世界卫生日宣传活动总结
2015/02/09 职场文书
导游词之无锡华莱坞
2019/12/02 职场文书
vue实现可拖拽的dialog弹框
2021/05/13 Vue.js