首页 > 编程知识 正文

python抽奖程序(python代码翻译)

时间:2023-05-06 09:52:23 阅读:87552 作者:2771

来源:早起的Python

作者: zjdmd

你好,我是早起的人。

这篇文章介绍了一个实用的Python办公自动化脚本“用Python批量翻译英语Word文档并保留格式”。 最终,比某些收费软件更有效。 我们先来看看具体的工作内容。

一、需求描述

有大量的外语文件。 (该案例以5份为例,分别命名为test1.docx test2.docx。 其中一份如下。

基本要求:“将这些文档的内容全部批量翻译成中文并导出为新文档”,具有以下效果:

高级要求:如果满足“保持原始文档格式”的要求,同时满足基本要求,则会产生以下效果:

二、逻辑梳理

(一)翻译API

本需求的核心是翻译,战略是利用互联网的翻译API。 这里推荐百度翻译开放平台。 如果不考虑同时数的话可以使用标准版,可以免费使用,没有文字数限制。

百度翻译开放平台: http://API.fanyi.Baidu.com/API/trans /产品/索引

使用百度的通用翻译API之前,需要完成以下工作。

使用百度账户登录百度翻译开放平台(http://api.fanyi.baidu.com); 注册为开发者,取得APPID; 进行开发者认证(如果只能跳过标准版); 启动通用翻译API服务:启动参考技术文档和Demo创作代码的链接

完成后,可以在个人页面上看到ID和密钥。 这很重要! 以下是整理后的通用翻译API的demo。 已经对输出进行了简单的修改,带着代码就可以使用了!

可以看出测试内容翻译得很准确。 如果需要多次访问API,请注意,免费版有并发行数和时间限制,可以在time模块中睡眠1秒钟

(二)格式修改

高级需求的难点是保留格式。 简单地说,原始文档的页面格式和段落格式是什么,翻译后对应的部分是什么。

基于上述逻辑关系,取得原文档的对应内容并代入新翻译的文档即可。 (只能暂时满足页面设置和段落设置的统一,对于段落内特定语言的格式修改,为了保证正确性,需要基于自然语言处理NLP,在本文中不涉及)

2.1页面样式

如果页面样式包含边距、方向、高度、宽度等,则从原始文档可以看出,页面样式具有很小的边距。 但是,不需要知道应该如何设定狭窄边距的4个方向,只要在代码中表现新旧文档的变量传递即可。 具体如下所述

2.2段落样式

段落样式包括对齐、缩进和间距,在原始文档中,段落后缩进和标题居中。 这些设定可以通过变量传递进行。 如果原始文档中未设置的变量值为None

ss="pgc-img-caption">

2.3 文字块样式修改

对于字号、加粗、斜体、颜色等样式调整,采取的策略是建立空列表,遍历原文档每一段每一个文字块,获取相应属性并放到各自的列表中,对同一段而言,其包含的文字块属性最多的选项赋值给翻译后文档的对应段落(如同一段全部或大部分的文字是加粗,则翻译后对应段落所有文字块均设置为加粗) 对NLP感兴趣的读者可自行尝试如何高度还原英文文档中某些特定词语的样式修改,并在翻译后的文档中体现出来

上面的代码不包含对字体的设置,因为没必要把英文的字体传递给中文文档。对中文字体的设置之前的文章有提到过,比较复杂,直接见代码:

from docx.oxml.ns import qn run.font.name = '微软雅黑' r = run._element.rPr.rFonts r.set(qn('w:eastAsia'), '微软雅黑')

(三)整体实现步骤

现在每个部分操作均以完成,考虑到本例中有多个文档均需要翻译,故全部逻辑如下:

利用 glob 模块批处理框架可获取某个文件的绝对路径由 python-docx 完成 Word 文件实例化后对段落进行解析解析出的段落文本交给百度通用翻译 API,解析返回的 Json 格式结果(上面的修改 demo 中已经完成了这一步)并重新写入新的文件同个文件全部解析、翻译并写入新文件后保存文件

三、代码实现

导入需要的模块,除翻译 demo 中需要的库外还需要 glob 库批量获取文件、python-docx 读取文件、time 模块控制访问并发。为什么要 os 模块见下文:

import requests import random import json from hashlib import md5 import time from docx import Document import glob import os

对原 demo 的部分内容进行保留,涉及到 query 参数的代码需要移动到后面的循环中。保留的部分:

效果如下

获取到段落文本后,可以将段落文本赋值给 query 参数,调用 API demo 的后续代码。输出结果的同时用 add_paragraph 将结果写入新文档:

最后保存成新文件,期望命名为 原文件名_translated 的形式,可用 os.path.basename 方法获取并经字符串拼接达到目的:

wordfile_new.save(path + r'\' + os.path.basename(file)[:-5] + '_translated.docx')

单个文件操作完成后将读取和创建文件的代码块放到批处理框架内:

完成了上面的内容后,基本需求就完成了。根据我们梳理的对样式的修改知识,再把样式调整的代码加进来就行了,最终完整代码如下:

代码运行完毕后得到五个新的翻译后文件

翻译效果如下,可以看到英文被翻译成中文,并且样式大部分保留!

至此,所有文档都被成功翻译,当然这是机器翻译的,具体应用时还需要对关键部分进一步人工调整,不过整体来说还是一次成功的Python办公自动化尝试!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。