又是反思工作任务的一天,因为国外客户的需要,需要把一堆文件转成英文,然后看着同事一条一条的翻译觉得头大,后面就开始捣鼓批量翻译。
撰写中的要求:1.批量翻译2.能直接将译文跟在原文后
第一个接口就是python库中自带的translator
import docx
doc = docx.Document('C:\\Users\\Administrator\\Desktop\\testa.docx')
new_doc = docx.Document()
from translate import Translator
translator = Translator(from_lang = 'zh',to_lang = 'en')
for paragraph in doc.paragraphs:
translation = translator.translate(paragraph.text)
text = paragraph.text
paragraph.text = f"{text}\n{translation}"
new_doc.add_paragraph(translation)
new_doc.save('newdoc.docx')
# 遍历文档中的每一个表格
for table in doc.tables:
# 遍历表格中的每一行
for row in table.rows:
# 遍历行中的每一个单元格
for cell in row.cells:
# 获取单元格中的文本
text = cell.text
# 如果文本不为空,则进行翻译
if text:
# 传入文本进行翻译
translated = translator.translate(text)
# 将翻译后的文本添加回单元格
cell.text = f"{text}\n{translated}"
print(translated) # 打印翻译后的文本信息到控制台
# 保存修改后的Word文档
doc.save('nd.docx')
后面等到开始遍历表格cell'的时候被告知把我限制调用了,后面就换成了百度翻译的接口
# 使用百度翻译API翻译文本
import requests
import random
import json
from hashlib import md5
# Set your own appid/appkey.
appid = 'yours'
appkey = 'yours'
# For list of language codes, please refer to `https://api.fanyi.baidu.com/doc/21`
from_lang = 'zh'
to_lang = 'en'
endpoint = 'http://api.fanyi.baidu.com'
path = '/api/trans/vip/translate'
url = endpoint + path
# Generate salt and sign
def make_md5(s, encoding='utf-8'):
return md5(s.encode(encoding)).hexdigest()
def baidu_api(query,from_lang,to_lang):
try:
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))
if 'trans_result' in result:
return result['trans_result'][0]['dst']
else:
return 'Translation failed'
except Exception as e:
print(f'Error during translation: {e}')
return 'Translation failed'
# 示例用法
if __name__ == '__main__':
query = '你好!'
print(baidu_api(query,from_lang, to_lang))
import docx
doc = docx.Document('C:\\Users\\Administrator\\Desktop\\testa.docx')
new_doc = docx.Document()
#from translate import Translator
#translator = Translator(from_lang = 'zh',to_lang = 'en')
for paragraph in doc.paragraphs:
translation = baidu_api(paragraph.text,from_lang, to_lang)
text = paragraph.text
paragraph.text = paragraph.text.replace(text,f"{text}\n{translation}")
print(paragraph.text)
new_doc.add_paragraph(paragraph.text)
doc.save('C:\\Users\\Administrator\\Desktop\\testa.docx')
# 遍历文档中的每一个表格
#for table in doc.tables:
# 遍历表格中的每一行
# for row in table.rows:
# # 遍历行中的每一个单元格
# for cell in row.cells:
# 获取单元格中的文本
# text = cell.text
# 如果文本不为空,则进行翻译
# if text:
# 传入文本进行翻译
# translated = translator.translate(text)
# 将翻译后的文本添加回单元格
# cell.text = f"{text}\n{translated}"
# print(translated) # 打印翻译后的文本信息到控制台
# 保存修改后的Word文档
#doc.save('nd.docx')
差不多是实现了刚开始的需求,但是还是有些问题:1.替换后的格式不一需要调整 2.表格内的内容还没有尝试翻译
还是希望大家在尝试并改进后,能够评论给予我改进问题的方法,有别的问题也可以讨论。
参考文章(部分,但感谢全部所参考的文章):
python3实现无限次翻译_python的translate库次数超过了怎么办-CSDN博客Python谷歌翻译(防封版)_from translate import translator 访问限制-CSDN博客摸鱼小脚本——Word表格自动中英对照翻译_python怎么把word表格翻译-CSDN博客登录百度账号
三、python-docx中paragraph替换内容和模板处理_python docx paragraph-CSDN博客
Python使用docx模块编辑Word文档_python_脚本之家
(默念互联网精神永存)