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处理RSS、ATOM模块FEEDPARSER介绍
Feb 18 Python
ubuntu系统下 python链接mysql数据库的方法
Jan 09 Python
django rest framework之请求与响应(详解)
Nov 06 Python
Python根据已知邻接矩阵绘制无向图操作示例
Jun 23 Python
python导入模块交叉引用的方法
Jan 19 Python
pandas删除指定行详解
Apr 04 Python
扩展Django admin的list_filter()可使用范围方法
Aug 21 Python
python3 求约数的实例
Dec 05 Python
Django 解决开发自定义抛出异常的问题
May 21 Python
python 图像插值 最近邻、双线性、双三次实例
Jul 05 Python
python之pygame模块实现飞机大战完整代码
Nov 29 Python
Python中super().__init__()测试以及理解
Dec 06 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
WINDOWS 2000下使用ISAPI方式安装PHP
2006/09/05 PHP
Yii2中关联查询简单用法示例
2016/08/10 PHP
php修改数组键名的方法示例
2017/04/15 PHP
Jquery ajax传递复杂参数给WebService的实现代码
2011/08/08 Javascript
JQuery循环滚动图片代码
2011/12/08 Javascript
使用jquery mobile做幻灯播放效果实现步骤
2013/01/04 Javascript
在jquery boxy中添加百度地图坐标拾取注意流程
2014/04/03 Javascript
jQuery中多个元素的Hover事件解决方案
2014/06/12 Javascript
javascript正则表达式参数/g与/i及/gi的使用指南
2014/08/27 Javascript
详解JavaScript基于面向对象之继承
2015/12/13 Javascript
BootStrap整体框架之基础布局组件
2016/12/15 Javascript
jQuery实现的简单手风琴效果示例
2018/08/29 jQuery
详解js动态获取浏览器或页面等容器的宽高
2019/03/13 Javascript
微信小程序实现授权登录
2019/05/15 Javascript
使用uni-app开发微信小程序的实现
2019/12/13 Javascript
Python socket.error: [Errno 98] Address already in use的原因和解决方法
2014/08/25 Python
用Python实现一个简单的能够上传下载的HTTP服务器
2015/05/05 Python
在Python中使用正则表达式的方法
2015/08/13 Python
Python在信息学竞赛中的运用及Python的基本用法(详解)
2017/08/15 Python
详解python基础之while循环及if判断
2017/08/24 Python
Python利用multiprocessing实现最简单的分布式作业调度系统实例
2017/11/14 Python
python批量识别图片指定区域文字内容
2019/04/30 Python
Django框架组成结构、基本概念与文件功能分析
2019/07/30 Python
django自带serializers序列化返回指定字段的方法
2019/08/21 Python
tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)
2020/06/30 Python
浅谈python处理json和redis hash的坑
2020/07/16 Python
美国汽配连锁巨头Pep Boys官网:轮胎更换、汽车维修服务和汽车零部件
2017/01/14 全球购物
Laura官网:加拿大女性的顶级时尚目的地
2019/09/20 全球购物
一个SQL面试题
2014/08/21 面试题
小学少先队辅导员述职报告
2015/01/10 职场文书
档案工作个人总结
2015/03/03 职场文书
宿舍卫生管理制度
2015/08/05 职场文书
《神奇的鸟岛》教学反思
2016/02/22 职场文书
python缺失值的解决方法总结
2021/06/09 Python
5道关于python基础 while循环练习题
2021/11/27 Python
TS 类型收窄教程示例详解
2022/09/23 Javascript