工作中有时会遇到需要中英文互相翻译的情况,词数少的话可以手动使用翻译软件进行 翻译,如果量很大,编写程序自动翻译会是个更好的选择.
本篇使用python编写脚本调用百度翻译API进行自动化翻译,依次读取文本文件的每一行, 翻译之后输出到结果文件中.
百度翻译API 当需要进行自动化翻译的时候,首先想到谷歌翻译,毕竟是公认的翻译最准确的平台, 在网上找到脚本实验,使用的是http请求来调用谷歌翻译 的主页,程序填入字段从而 获取到翻译后的结果,测试发现不可行,无法抓取翻译后的内容,查看网页源代码发现 应该是谷歌将结果放到其他位置而不是当前页面;谷歌到也提供翻译API,不过收费的, 暂时不考虑.
然后自然找到了百度翻译,其翻译平台在这里:百度翻译开放平台 . 它的好处就是每个月翻译字数低于200万是免费的,超过了再收费,对我这种偶尔翻译 下的人来说,基本是可以免费使用了.
使用前需要在主页点击申请接入 ,进行注册,它会给APPID和密钥,这些东西是之后 调用API翻译必须要得.官方文档有详细的使用说明和示例,不多说,直接上我的脚本的代码.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 import sysimport httplibimport md5import urllibimport randomimport jsonreload(sys) sys.setdefaultencoding('utf-8' ) def trans_line (line, fromLang, toLang ): result = [] appid = '' secretKey = '' httpClient = None myurl = '/api/trans/vip/translate' q = line salt = random.randint(32768 , 65536 ) sign = appid+q+str (salt)+secretKey m1 = md5.new() m1.update(sign) sign = m1.hexdigest() myurl = myurl+'?appid=' +appid+'&q=' +urllib.quote(q)+'&from=' +fromLang+'&to=' +toLang+'&salt=' +str (salt)+'&sign=' +sign try : httpClient = httplib.HTTPConnection('api.fanyi.baidu.com' ) httpClient.request('GET' , myurl) response = httpClient.getresponse() jsonData = json.loads(response.read()) result.append(jsonData['trans_result' ][0 ]['src' ]) result.append(jsonData['trans_result' ][0 ]['dst' ]) except Exception, e: print e finally : if httpClient: httpClient.close() return result if __name__ == "__main__" : fromLang = 'en' toLang = 'zh' if len (sys.argv) != 2 : print "Enter a file name: " exit() filename = sys.argv[1 ] tmp = filename.split("." ) if len (tmp) != 2 : print "Error filename" exit() out_name = tmp[0 ] + '_en2zh.' + tmp[1 ] translated_list = [] with open (filename, 'r' ) as fh_in: for line in fh_in: line = line.strip() if not line: continue translated_list.append(trans_line(line, fromLang, toLang)) with open (out_name, 'w' ) as fh_out: for line_result in translated_list: fh_out.write(line_result[1 ] + "\n" )
测试文本en.txt 如下,功率相关的英文.
1 2 3 4 Active power P Reactive power Q Apparent power S Power factoer
命令行输入:python translate_en2zh.py en.txt
,没有任何输出则运行成功.
打开新生成的en_en2zh.txt :
翻译完全正确.
可以在管理控制台 查看使用字符的详细情况