【Python】Python的urllib、urllib2模块调用“百度翻译”API进行批量自动翻译
1.问题描述
在文本数据处理时,经常回出现文本中各种语言的混杂情况,包括:英文、日语、俄语、法语等,需要将不同语种的语言批量翻译成中文进行处理。可以通过Python直接调用百度提供的翻译API进行批量的翻译。
百度翻译API详细文档见:百度翻译API文档
2.问题解决
开发环境:Linux
将文本中的中文和非中文进行分离,对非中文的部分进行翻译。
Python的代码如下:translate.py
#!/usr/bin/python #-*- coding:utf-8 -*- import sys reload(sys) sys.setdefaultencoding("utf8") import json #导入json模块 import urllib #导入urllib模块 from urllib2 import Request, urlopen, URLError, HTTPError #导入urllib2模块 def translate(inputFile, outputFile): fin = open(inputFile, 'r') #以读的方式打开输入文件 fout = open(outputFile, 'w') #以写的方式代开输出文件 for eachLine in fin: #按行读入文件 line = eachLine.strip() #去除每行首尾可能的空格等 quoteStr = urllib.quote(line) #将读入的每行内容转换成特定的格式进行翻译 url = 'http://openapi.baidu.com/public/2.0/bmt/translate?client_id=WtzfFYTtXyTocv7wjUrfGR9W&q=' + quoteStr + '&from=auto&to=zh' try: resultPage = urlopen(url) #调用百度翻译API进行批量翻译 except HTTPError as e: print('The server couldn\'t fulfill the request.') print('Error code: ', e.code) except URLError as e: print('We failed to reach a server.') print('Reason: ', e.reason) except Exception, e: print 'translate error.' print e continue resultJason = resultPage.read().decode('utf-8') #取得翻译的结果,翻译的结果是json格式 js = None try: js = json.loads(resultJason) #将json格式的结果转换成Python的字典结构 except Exception, e: print 'loads Json error.' print e continue key = u"trans_result" if key in js: dst = js["trans_result"][0]["dst"] #取得翻译后的文本结果 outStr = dst else: outStr = line #如果翻译出错,则输出原来的文本 fout.write(outStr.strip().encode('utf-8') + '\n') #将结果输出 fin.close() fout.close() if __name__ == '__main__': translate(sys.argv[1], sys.argv[2]) #通过获得命令行参数获得输入输出文件名来执行,方便
程序完成之后,在Linux命令行输入:python translate.py myinput.txt myoutput.txt
就能够执行了。最终的翻译结果都写入到输出文件myoutput.txt中了。
3.注意
(1)程序的前几行都是常规写法,为了解决可能经常出现的中文编码问题。
(2)第18行,需要进行翻译的文本需要通过quote函数转化成特定的格式编码进行翻译。
(3)第19行,url中的“&from=auto&to=zh”,from后面接源语言的代码,to后面接目的语言的代码,如:zh表示中文、en表示英文,auto表示自动的任意语言。
希望对大家有所帮助,谢谢。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。