python 翻译word文档

原文地址:

用 Python 写的文档批量翻译工具,效果竟然超越付费软件?_平静愉悦的博客-CSDN博客

接入与错误码文档见百度开放平台:

百度翻译开放平台

from docx import Document
from docx.oxml.ns import qn
import requests
import random
import json
from hashlib import md5
import time
import glob
import os


def make_md5(s, encoding='utf-8'):
    return md5(s.encode(encoding)).hexdigest()


appid = '替换成自己的xxx'
appkey = '替换成自己的xxx'
from_lang = 'en'
to_lang = 'zh'
endpoint = 'http://api.fanyi.baidu.com'
path = '/api/trans/vip/translate'
url = endpoint + path
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
filepath = '../source'
for file in glob.glob(filepath + r'/*.docx'):
    print(file)
    wordfile = Document(file)
    wordfile_new = Document()
    sections = wordfile.sections
    sec = sections[0]
    sections_new = wordfile_new.sections
    sec_new = sections_new[0]
    sec_new.left_margin = sec.left_margin
    sec_new.right_margin = sec.right_margin
    sec_new.top_margin = sec.top_margin
    sec_new.bottom_margin = sec.bottom_margin
    sec_new.header_distance = sec.header_distance
    sec_new.orientation = sec.orientation
    sec_new.page_height = sec.page_height
    sec_new.page_width = sec.page_width

    for paragraph in wordfile.paragraphs:
        if not paragraph.text:
            wordfile_new.add_paragraph('\n')
            print("not paragraph.text")
            continue
            print("continue")

        size_lst = []
        bold_lst = []
        italic_lst = []
        color_lst = []
        highlight_color_lst = []
        underline_lst = []
        strike_lst = []
        double_strike_lst = []
        subscript_lst = []
        superscript_lst = []
        for run in paragraph.runs:
            size_lst.append(run.font.size)
            bold_lst.append(run.font.bold)
            italic_lst.append(run.font.italic)
            color_lst.append(run.font.color.rgb)
            highlight_color_lst.append(run.font.highlight_color)
            underline_lst.append(run.font.underline)
            strike_lst.append(run.font.strike)
            double_strike_lst.append(run.font.double_strike)
            subscript_lst.append(run.font.subscript)
            superscript_lst.append(run.font.superscript)

        p = wordfile_new.add_paragraph()
        p.paragraph_format.alignment = paragraph.paragraph_format.alignment
        p.paragraph_format.left_indent = paragraph.paragraph_format.left_indent
        p.paragraph_format.right_indent = paragraph.paragraph_format.right_indent
        p.paragraph_format.first_line_indent = paragraph.paragraph_format.first_line_indent

        p.paragraph_format.line_spacing = paragraph.paragraph_format.line_spacing
        p.paragraph_format.space_before = paragraph.paragraph_format.space_before
        p.paragraph_format.space_after = paragraph.paragraph_format.space_after

        query = paragraph.text
        if query == '\n':
            continue
        salt = random.randint(32768, 65536)
        sign = make_md5(appid + query + str(salt) + appkey)
        payload = {'appid': appid, 'q': query, 'from': from_lang, 'to': to_lang, 'salt': salt, 'sign': sign}
        print(payload)
        r = requests.post(url, params=payload, headers=headers)
        result = r.json()
        print(result)
        for res in result['trans_result']:
            p.add_run(res['dst'])
        for run in p.runs:
            run.font.name = '微软雅黑'
            r = run._element.rPr.rFonts
            r.set(qn('w:eastAsia'), '微软雅黑')
            run.font.size = max(size_lst, key=size_lst.count)
            run.font.bold = max(bold_lst, key=bold_lst.count)
            run.font.italic = max(italic_lst, key=italic_lst.count)
            run.font.color.rgb = max(color_lst, key=color_lst.count)
            run.font.highlight_color = max(highlight_color_lst, key=highlight_color_lst.count)
            run.font.underline = max(underline_lst, key=underline_lst.count)
            run.font.strike = max(strike_lst, key=strike_lst.count)
            run.font.subscript = max(subscript_lst, key=subscript_lst.count)
            run.font.superscript = max(superscript_lst, key=superscript_lst.count)
    wordfile_new.save('translated.docx')
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用Python翻译Word文档,你可以按照以下步骤进行操作: 1. 首先,你需要安装Python-docx库,这个库可以用来处理Word文档。你可以使用pip命令来安装它。 2. 在你的代码中导入所需的库和函数。例如,你可以导入docx库来处理Word文档,导入sentenceSplit函数来将文档中的段落分割成句子,导入CommonTranslate函数来进行翻译。 3. 创建一个新的Word文档对象,用于保存翻译后的内容。 4. 获取要翻译Word文档的路径。你可以通过用户输入或者直接指定路径来获取。 5. 使用sentenceSplit函数将文档中的段落分割成句子,并将结果保存在一个列表中。 6. 遍历句子列表,将每个英文句子翻译成中文。你可以使用CommonTranslate函数来实现翻译。 7. 将翻译后的中文句子添加到输出文档中。 8. 保存输出文档。 下面是一个示例代码,演示了如何使用Python翻译Word文档: ```python from functions import sentenceSplit as SenSp from functions import CommonTranslate as ComTra import docx # 创建一个新的Word文档 output_doc = docx.Document() # 获取要翻译Word文档 path = input('请输入文件路径:') # 将文档中的段落分割并保存成列表 worddata = SenSp.SentenceSplit(path) for sentence in worddata: # 将英文句子翻译成中文 translated_sentence = ComTra.translate(sentence) # 将中文句子添加到输出文档中 output_doc.add_paragraph(translated_sentence) # 保存输出文档 output_doc.save('result.docx') ``` 请注意,这只是一个示例代码,你需要根据你的具体需求进行适当的修改。另外,你还需要确保已经正确安装了所需的库和函数。 #### 引用[.reference_title] - *1* *2* *3* [python实现整篇word文档翻译](https://blog.csdn.net/tycodehh/article/details/130443333)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半岛铁盒.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值