批量翻译word文档(中转英、两种翻译接口)

又是反思工作任务的一天,因为国外客户的需要,需要把一堆文件转成英文,然后看着同事一条一条的翻译觉得头大,后面就开始捣鼓批量翻译。

撰写中的要求: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_脚本之家
 

(默念互联网精神永存) 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值