使用python实现字幕翻译
目的
导师录制慕课,需要实现双语字幕。导师给的是英文txt文件如下图:
要完成的目标是借用百度翻译生成中文如下图
整体思路
单步实现
1、读取文件
# 读取TXT文档 readlines() 返回的是列表, readline() 读取每一行 ,read()返回的是字符串。
def read_txt(path):
'''实现TXT文档的读取,一次将内容全部取出'''
content = ''
with open(path) as f:
content = f.readlines()
return content
# 也可以用readline()读取每一行
c=read_txt('1-5.txt')
#print(c)
2、调用百度翻译API
参考:注册申请百度翻译接口
自己结合需求更改后的代码:
#百度通用翻译API,不包含词典、tts语音合成等资源,如有相关需求请联系translate_api@baidu.com
# coding=utf-8
import http.client
import hashlib
import urllib
import random
import json
import time
from pip._vendor.distlib.compat import raw_input
# 百度appid和密钥需要通过注册百度【翻译开放平台】账号后获得
appid = '********' # 填写你的appid
secretKey = '********' # 填写你的密钥
httpClient = None
myurl = '/api/trans/vip/translate' # 通用翻译API HTTP地址
fromLang = 'auto' # 原文语种
toLang = 'zh' # 译文语种
salt = random.randint(32768, 65536)
# 手动录入翻译内容,q存放
#q = raw_input("please input the word you want to translate:")
list_new = []
for line in c:
q=line
sign = appid + q + str(salt) + secretKey
sign = hashlib.md5(sign.encode()).hexdigest()
myurl = myurl + '?appid=' + appid + '&q=' + urllib.parse.quote(q) + '&from=' + fromLang + \
'&to=' + toLang + '&salt=' + str(salt) + '&sign=' + sign
# try except 是异常处理机制。建立会话,返回结果
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)
# 返回的结果只取翻译后的部分
D = result['trans_result'][0]['dst']
#加换行符是写入txt时需要
D = D + '\n'
#返回的D是字符串,需要转化成列表
D=D.split('.')
#合成列表
list_new.extend(D)
#print (D)
# 延时函数 当QPS每秒查询率 不够用是要用延时函数,即使用标准版时要用延时函数,使用高级版不需要
#time.sleep(1)
except Exception as e:
print (e)
finally:
if httpClient:
httpClient.close()
3、中英文列表混合,方便写入一个文件
zip() 函数是将两个列表元素一一对应生成元组;
chain.from_iterable()是将元组返回列表
#导入 chain
from itertools import chain
F=list(chain.from_iterable(zip(c, list_new)))
#print(F)
4、写入操作
# 写TXT文档
def write_txt(path,content):
'''实现TXT文档的写方法'''
with open(path,'a+') as f:
f.write(content)
for i in F:
write_txt("1-5-1.txt",i)