您的位置:首页 > 编程语言 > Python开发

【Python】Python的urllib、urllib2模块调用“百度翻译”API进行批量自动翻译

2014-12-31 15:37 609 查看

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表示自动的任意语言。

希望对大家有所帮助,谢谢。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: