python实现在线翻译功能
对于需要大量翻译的数据,人工翻译太慢,此时需要使用软件进行批量翻译。
1.使用360的翻译
deffanyi_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)
returntranslate_result
2.使用Google自带的API来翻译
注意,需要安装API模块即可。
pipinstalltranslator
#googleapi,per1000wordseveryday deftranslate_cn_api(content): translator=Translator(to_lang="zh") translation=translator.translate(content) returntranslation
3.使用Google翻译来做,是由于Google提供的API有字节限制,每天只能翻译1000字。
备注:环境准备
3.1java环境
3.2安装execjs模块
pipinstallPyExecJS
3.3两个实现模块
HandleJs.py
#coding=utf-8
importexecjs
classPy4Js():
def__init__(self):
self.ctx=execjs.compile("""
functionTL(a){
vark="";
varb=406644;
varb1=3293161072;
varjd=".";
var$b="+-a^+6";
varZb="+-3^+b+-f";
for(vare=[],f=0,g=0;gm?e[f++]=m:(2048>m?e[f++]=m>>6|192:(55296==(m&64512)&&g+1>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;fa&&(a=(a&2147483647)+2147483648);
a%=1E6;
returna.toString()+jd+(a^b)
};
functionRL(a,b){
vart="a";
varYb="+";
for(varc=0;c=t?d.charCodeAt(0)-87:Number(d),
d=b.charAt(c+1)==Yb?a>>>d:a<
main.py
#coding=utf-8
#importurllib.request
importurllib2
fromHandleJsimportPy4Js
fromtranslateimportTranslator
importrequests
#Example:find_last('aaaa','a')returns3
#Makesureyourprocedurehasareturnstatement.
deffind_last(string,str):
last_position=-1
whileTrue:
position=string.find(str,last_position+1)
ifposition==-1:
returnlast_position
last_position=position
defopen_url(url):
headers={'User-Agent':'Mozilla/5.0(WindowsNT6.1;WOW64;rv:23.0)Gecko/20100101Firefox/23.0'}
req=urllib2.Request(url=url,headers=headers)
response=urllib2.urlopen(req)
data=response.read().decode('utf-8')
returndata
deftranslate_core(content,tk,language):
iflen(content)>4891:
print("toolongbyte>4891")
return
content=urllib2.quote(content)
iflanguage=='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)
iflen(content)<10:
end=result.find("\",")
ifend>4:
returnresult[4:end]
else:
result_all=''
iflanguage=='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('],[')
foriinrange(len(list)-1):
end=list[i].find("\",")
tmp_buf=list[i][1:end]
output_cn=output_cn+tmp_buf
returnoutput_cn
deftranslate_normal(content,language):
js=Py4Js()
tk=js.getTk(content)
#print('english:'+content)
cn_buf=translate_core(content,tk,language)
#print('Chinese:'+cn_buf)
returncn_buf
deftranslate_cn(content,language):
LEN_LIMIT=4891
all_len=len(content)
print('en:'+content)
ifall_len>LEN_LIMIT:
content_cn=''
whileTrue:
content_limit=content[0:LEN_LIMIT]
limit_end=find_last(content_limit,'.')+1
#print('limit_end:'+str(limit_end))
iflimit_end==0:
limit_end=find_last(content_limit,'')+1
iflimit_end==0:
limit_end=LEN_LIMIT
content_en=content[0:limit_end]
leave_len=all_len-limit_end
ifcontent_en=='':
break;
#print('content_en:'+content_en)
content_cn=content_cn+translate_normal(content_en,language);
content=content[limit_end:]
returncontent_cn
else:
returntranslate_normal(content,language)
#googleapi,per1000wordseveryday
deftranslate_cn_api(content):
translator=Translator(to_lang="zh")
translation=translator.translate(content)
returntranslation
if__name__=="__main__":
content="""Beautifulisbetterthanugly.
Explicitisbetterthanimplicit.
Simpleisbetterthancomplex.
Complexisbetterthancomplicated.
Namespacesareonehonkinggreatidea--let'sdomoreofthose!"""
#
content="""
IT-GrundschutzM5.131:AbsicherungvonIP-ProtokollenunterWindowsServer2003."""
#content='High'
content="""Beautifulisbetterthanugly.
Explicitisbetterthanimplicit.
Simpleisbetterthancomplex.
Complexisbetterthancomplicated.
Namespacesareonehonkinggreatidea--let'sdomoreofthose!"""
language='en'
test=translate_cn(content.replace('\n',''),language)
print('ok:'+test)
#content='Checksversion'
此处实现了德语翻译成中文和英文翻译成中文。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。