在大数据处理中,经常需要大批量地翻译短小的文字,使用在线翻译平台的API 调用能够大幅度提高效率。
最近尝试了一下。
第一步在百度翻译开放平台注册
申请APPID 和SECRET加密码
源代码(mjs)
import md5 from "md5"
import axios from "axios"
const apiUrl = 'http://api.fanyi.baidu.com/api/trans/vip/translate';
const appid = "APPID" //process.env.APPID;
const secret = "SECRET" // process.env.SECRET;
const qs = `苹果
`;
const requestTranslate = (q) => {
const salt = Math.random();
const sign = md5(appid + q + salt + secret);
const params = {
q,
from: 'zh',
to: 'en',
salt,
appid,
sign,
};
return axios.get(apiUrl, {
params,
});
};
requestTranslate(qs).then((v) => {
console.log(v.data.trans_result);
});
目前我已经成功地应用与UNSPSC 分类数据的翻译,可惜的是百度对于专业术语的翻译还不太准确。
import requests
import random
import json
from hashlib import md5
# Set your own appid/appkey.
appid = 'INPUT_YOUR_APPID'
appkey = 'INPUT_YOUR_APPKEY'
# For list of language codes, please refer to `https://api.fanyi.baidu.com/doc/21`
from_lang = 'en'
to_lang = 'zh'
endpoint = 'http://api.fanyi.baidu.com'
path = '/api/trans/vip/translate'
url = endpoint + path
query = 'Hello World! This is 1st paragraph.\nThis is 2nd paragraph.'
# Generate salt and sign
def make_md5(s, encoding='utf-8'):
return md5(s.encode(encoding)).hexdigest()
salt = random.randint(32768, 65536)
sign = make_md5(appid + query + str(salt) + appkey)
# Build request
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
payload = {'appid': appid, 'q': query, 'from': from_lang, 'to': to_lang, 'salt': salt, 'sign': sign}
# Send request
r = requests.post(url, params=payload, headers=headers)
result = r.json()
# Show response
print(json.dumps(result, indent=4, ensure_ascii=False))
def baiduTranslate(translate_text, flag=1):
'''
:param translate_text: 待翻译的句子,len(q)<2000
:param flag: 1:原句子翻译成英文;0:原句子翻译成中文
:return: 返回翻译结果。
For example:
q=我今天好开心啊!
result = {'from': 'zh', 'to': 'en', 'trans_result': [{'src': '我今天好开心啊!', 'dst': "I'm so happy today!"}]}
'''
appid = 'xxxxx' # 填写你的appid
secretKey = 'xxxxxx' # 填写你的密钥
httpClient = None
myurl = '/api/trans/vip/translate' # 通用翻译API HTTP地址
fromLang = 'auto' # 原文语种
if flag:
toLang = 'en' # 译文语种
else:
toLang = 'zh' # 译文语种
salt = random.randint(3276, 65536)
sign = appid + translate_text + str(salt) + secretKey
sign = hashlib.md5(sign.encode()).hexdigest()
myurl = myurl + '?appid=' + appid + '&q=' + urllib.parse.quote(translate_text) + '&from=' + fromLang + \
'&to=' + toLang + '&salt=' + str(salt) + '&sign=' + sign
# 建立会话,返回结果
try:
httpClient = http.client.HTTPConnection('api.fanyi.baidu.com')
httpClient.request('GET', myurl)
# response是HTTPResponse对象
response = httpClient.getresponse()
result_all = response.read().decode("utf-8")
result = json.loads(result_all)
# return result
return result['trans_result'][0]['dst']
except Exception as e:
print(e)
finally:
if httpClient:
httpClient.close()
if __name__ == '__main__':
# 手动录入翻译内容,q存放
# q = raw_input("please input the word you want to translate:")
q = "介绍一下整本书,比如是传主的人生,或者作者写这本书的特色。可参看目录、序言或简介等资料。"
'''
flag=1 输入的句子翻译成英文
flag=0 输入的句子翻译成中文
'''
result = baiduTranslate(q, flag=1) # 百度翻译
print("原句:"+q)
print(result)