摸鱼小脚本——Word表格自动中英对照翻译
1. 任务简述
-
任务1:现有某任务需要将某个软件中的参数名称和对应的参数介绍信息导出,文字全为英文,并且需要将参数名称与参数介绍信息保存到Word中,以表格形式存储。
- 总计信息608条,但软件本身没有导出全部参数及信息的功能,而且软件中无法选中复制。
- 需要复制的部分信息如下:
-
任务2:将任务1中保存的Word表格中的英文文本翻译为中文,需求中英文对照翻译,中文翻译需要放在英文的下一行。
- 所以不能直接全文翻译为一个新的Word文件,否则还要一个一个复制到原来文本的下面去。
2. 解决方案
- 对于任务1:目前想到的是使用表格OCR识别,然后复制到Word表格中。
- 表格OCR识别需要识别后保留为表格形式,而不是简单的文本识别,否则还是需要手动一个一个复制排版。
- 不过也比较繁琐,看有没有更好的方法。
- 对于任务2:采用Python脚本的方式,调用百度翻译API进行自动化翻译。
- 当然,也可以使用其他翻译源,可以尝试。
3. 具体实现
3.1. 在线表格OCR识别
- 发现的几个还可以的在线表格OCR识别网站:
- 诚华OCR 专业图像文字识别
- 免费次数还挺多,识别后,手动下载
.xlsx
文件
- 免费次数还挺多,识别后,手动下载
- 不登录,免费版可以用几次:白描网页版-图片转Excel
- 不登录免费使用5次,登录后再多几次:薪火科技-表格识别OCR
- 诚华OCR 专业图像文字识别
- 网站有很多,不多列举了,免费次数用完了,就换一个继续免费识别。
- 识别后的
.xlsx
文件内容效果如下:
- 识别效果还不错,粘贴到Word表格中的效果如下:
- 标题是手动输入的
- 标题是手动输入的
3.2. Python自动化中英对照翻译
- 需求工具:
- 百度翻译API平台:百度翻译开放平台 (baidu.com)
- 申请百度翻译API:略,自行查询
APP ID
和密钥
在百度翻译开放平台————管理控制台————开发者信息————申请信息
中
- 百度翻译API平台:百度翻译开放平台 (baidu.com)
- 通用文本翻译文档:百度翻译开放平台 (baidu.com)
- 代码参考:如何使用Python调用百度翻译API(最新) - 知乎 (zhihu.com)
- 具体代码如下
# -*- coding: utf-8 -*-
# 百度翻译开放平台:http://api.fanyi.baidu.com/
# 通用文本翻译文档:http://api.fanyi.baidu.com/doc/21
# 代码参考:https://zhuanlan.zhihu.com/p/625585142
# 关于请求次数太快的解决方法:https://zhuanlan.zhihu.com/p/625871969
import docx
import requests
import requests
import random
import json
from hashlib import md5
import time
# Set your own appid/appkey.
appid = '填入你申请的 AppID' # INPUT_YOUR_APPID
appkey = '填入你申请的 AppKey' # INPUT_YOUR_APPKEY
# For list of language codes, please refer to `https://api.fanyi.baidu.com/doc/21`
from_lang = 'en' # 原始语言类型:en 英语
to_lang = 'zh' # 翻译后语言类型:zh 中文
endpoint = 'https://fanyi-api.baidu.com'
path = '/api/trans/vip/translate'
url = endpoint + path # 官方文档上的通用翻译API HTTPS 地址:https://fanyi-api.baidu.com/api/trans/vip/translate
# Generate salt and sign 两个参数用于确保请求的安全性
def make_md5(s, encoding='utf-8'):
return md5(s.encode(encoding)).hexdigest()
def Translate(query):
# query = 'Hello World! This is 1st paragraph.\nThis is 2nd paragraph.'
salt = random.randint(32768, 65536)
sign = make_md5(appid + text + 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()
translated_text = ' '.join(result['trans_result'][0]['dst'])
# print(translated_text)
time.sleep(1) # 停止1秒,避免请求速度太快而被拒绝
return translated_text
# ------------------------
start = time.time() # 开始计时
# 打开需要翻译的Word文档
doc = docx.Document('test.docx')
# 遍历文档中的每一个表格
for table in doc.tables:
# 遍历表格中的每一行
for row in table.rows:
# 遍历行中的每一个单元格
for cell in row.cells:
# 获取单元格中的文本
text = cell.text
# 如果文本不为空,则进行翻译
if text:
# 传入文本进行翻译
translated = Translate(text)
# 将翻译后的文本添加回单元格
cell.text = f"{text}\n{translated}"
print(translated) # 打印翻译后的文本信息到控制台
# 保存修改后的Word文档
doc.save('translated_test.docx')
end = time.time() # 停止计时
print("Execution Time(执行耗时):", end - start)
print("\n~~~执行完成~~~")
- 翻译后的文档效果如下:
- 不谈翻译的准确性,至少格式还是可以的🤪
到底了 🤪