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 相关文章推荐
flask中使用SQLAlchemy进行辅助开发的代码
Feb 10 Python
Python中使用OpenCV库来进行简单的气象学遥感影像计算
Feb 19 Python
使用Python的Flask框架表单插件Flask-WTF实现Web登录验证
Jul 12 Python
利用python微信库itchat实现微信自动回复功能
May 18 Python
Python中单、双下划线的区别总结
Dec 01 Python
Python numpy 提取矩阵的某一行或某一列的实例
Apr 03 Python
PyQt QListWidget修改列表项item的行高方法
Jun 20 Python
python实现回旋矩阵方式(旋转矩阵)
Dec 04 Python
pycharm第三方库安装失败的问题及解决经验分享
May 09 Python
Python实现UDP程序通信过程图解
May 15 Python
python实现爱奇艺登陆密码RSA加密的方法示例详解
May 27 Python
如何让PyQt5中QWebEngineView与JavaScript交互
Oct 21 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获取表单textarea数据中的换行问题
2010/09/10 PHP
php学习笔记 PHP面向对象的程序设计
2011/06/13 PHP
php代码运行时间查看类代码分享
2011/08/06 PHP
laravel框架与其他框架的详细对比
2019/10/23 PHP
laravel框架中表单请求类型和CSRF防护实例分析
2019/11/23 PHP
Jquery和JS用外部变量获取Ajax返回的参数值的方法实例(超简单)
2013/06/17 Javascript
Thinkphp模板没有解析直接原样输出的解决方法
2014/10/31 Javascript
JS+CSS实现模仿浏览器网页字符查找功能的方法
2015/02/26 Javascript
JavaScript通过prototype给对象定义属性用法实例
2015/03/23 Javascript
JS实现控制表格行内容垂直对齐的方法
2015/03/30 Javascript
JS实现仿google、百度搜索框输入信息智能提示的实现方法
2015/04/20 Javascript
基于JavaScript实现仿京东图片轮播效果
2015/11/06 Javascript
jQuery实现HTML表格单元格的合并功能
2016/04/06 Javascript
JavaScript事件学习小结(五)js中事件类型之鼠标事件
2016/06/09 Javascript
js实现刷新页面后回到记录时滚动条的位置【两种方案可选】
2016/12/12 Javascript
基于VuePress 轻量级静态网站生成器的实现方法
2018/04/17 Javascript
VUE2.0+ElementUI2.0表格el-table循环动态列渲染的写法详解
2018/11/30 Javascript
js console.log打印对象时属性缺失的解决方法
2019/05/23 Javascript
jQuery 常用特效实例小结【显示与隐藏、淡入淡出、滑动、动画等】
2020/05/19 jQuery
vue3.0生命周期的示例代码
2020/09/24 Javascript
利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化)
2021/02/24 Javascript
Python数据结构之Array用法实例
2014/10/09 Python
如何解决django配置settings时遇到Could not import settings 'conf.local'
2014/11/18 Python
python构建深度神经网络(续)
2018/03/10 Python
Python中Numpy包的安装与使用方法简明教程
2018/07/03 Python
python retrying模块的使用方法详解
2019/09/25 Python
Python Selenium参数配置方法解析
2020/01/19 Python
详解如何修改python中字典的键和值
2020/09/29 Python
Python实现邮件发送的详细设置方法(遇到问题)
2021/01/18 Python
主键(Primary Key)约束和唯一性(UNIQUE)约束的区别
2013/05/29 面试题
汽车广告策划方案
2014/05/31 职场文书
学校感恩教育活动总结
2014/07/07 职场文书
夏季药店促销方案
2014/08/22 职场文书
农村党员学习党的群众路线教育实践活动心得体会
2014/11/04 职场文书
会计工作自我鉴定范文
2019/06/21 职场文书
担保书范文
2019/07/09 职场文书