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

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



希望对大家有所帮助,谢谢。

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