在日常工作环境下,翻译工具的运用十分普遍,诸如Google浏览器内置插件,可以轻松实现对各类外文网站的即时翻译。当面对含有大量待译文本的Excel表格时,若无法依靠这些免费服务,又该如何应对呢?显然,逐行手工式的复制和黏贴并不是理想之选。为寻求更高效、精确的处理方法,我们考虑采用Python套用免费翻译API来执行此项任务。
一、什么是文本翻译 API?
能够将源语言文本快速、准确地转换成目标语言文本。通过该服务,用户可以根据不同的语言参数实现多种国际语言之间的互译,满足用户在跨语言交流、学习和工作中的翻译需求。幂简API平台提供了多种维度发现API的功能,下图提供的是所有提供文本翻译的服务商。用户可以根据自己的需求选择适合自己的服务商。
二、文本翻译 API 有哪些特性?
- 多语言支持:支持上百种语言的自动识别与互译,涵盖全球主要语系及众多方言、地区性语言。
- 高准确性:利用先进的神经网络和深度学习技术,特别是基于Transformer架构的神经机器翻译模型,实现对原文语义的精准理解和目标语言的流畅生成。
- 上下文理解:神经网络模型能够捕捉并理解文本的上下文信息,确保翻译结果不仅准确传达单个词汇的意义,还能反映出整个句子乃至段落的逻辑关系和语境微妙之处。
- 实时翻译:支持实时翻译,满足即时通讯、旅游预订、电子商务等需要快速响应的应用场景
三、文本翻译 API 适用于什么应用场景?
- **电子商务平台
**电商平台利用翻译API自动将商品标题、描述、规格、用户评价等内容实时翻译成多种语言,如英语、法语、日语、阿拉伯语等,使全球消费者能够无障碍浏览和购买,提升国际市场的销售额。 - 旅游预订网站
旅行服务网站集成翻译API,将酒店介绍、景点详情、用户评论等信息即时翻译成游客的母语,增强用户体验,促进跨国旅游业务的增长。 - 科研文献检索
科研人员借助翻译API快速浏览和理解非母语的学术论文摘要或全文,跨越语言屏障,追踪国际前沿研究成果,促进跨学科、跨国界的学术交流。 - 呼叫中心
跨国企业的客服系统集成翻译API,客服代表能够实时翻译客户的询问,提供母语服务,提升客户满意度和问题解决效率。
四、如何找到免费翻译API
幂简集成是国内领先的API集成管理平台,专注于为开发者提供全面、高效、易用的API集成解决方案。幂简API平台提供了多种维度发现API的功能:通过关键词搜索免费翻译API、从 API Hub 分类浏览API、从 开放平台 分类浏览企业间接寻找API等。
五、如何一步一步实现excel批量翻译
- 导入所需的模块:
openpyxl
:用于处理 Excel 文件。urllib.parse
:用于 URL 编码。requests
:用于发送 HTTP 请求。json
:用于处理 JSON 数据。concurrent.futures
:用于实现多线程。
- 定义常量:
BATCH_SIZE = 100
:指定每次处理的批量大小为 100 条数据。THREAD_COUNT = 10
:指定线程池中的线程数量为 10 个。
- 定义
translate_text
函数:
- 对输入的文本进行 URL 编码。
- 构建翻译 API 的请求 URL 并发送 GET 请求。
- 根据响应状态码判断是否成功获取数据,若成功则解析 JSON 并返回翻译结果,否则返回
None
。
- 定义
process_batch
函数:
- 接收工作表对象
sheet
以及批处理的起始行start
和结束行end
。 - 遍历指定范围内的行。
- 获取每行的第一个单元格的值,若有值则调用
translate_text
函数进行翻译。 - 若获取到翻译结果,将其写入当前行的第二列单元格,并打印相关日志。
- 定义
main
函数:
- 指定要处理的 Excel 文件路径。
- 使用
openpyxl
加载工作簿并获取活动工作表。 - 获取工作表中的最大行数,计算批次数。
- 创建线程池,并初始化一个用于存储线程执行结果的
futures
列表。 - 循环创建多个批处理任务,将每个批处理任务提交到线程池,并将任务的 Future 对象添加到
futures
列表中。 - 等待所有任务完成,获取任务结果,若有异常则打印异常信息。
- 保存修改后的 Excel 文件,并关闭工作簿。
- 在
if __name__ == "__main__"
条件下执行main
函数,启动整个程序的运行。 - 代码示例如下:
import openpyxl<br>
import urllib.parse<br>
import requests<br>
import json<br>
import concurrent.futures<br>
<br>
BATCH_SIZE = 100 # 每次处理的批量大小<br>
THREAD_COUNT = 10 # 线程池中的线程数量<br>
<br>
<br>
def translate_text(text):<br>
encoded_text = urllib.parse.quote(text.replace(" ", " ").strip())<br>
api_url = f"https://api.pearktrue.cn/api/translate/?text={encoded_text}&type=AUTO"<br>
response = requests.get(api_url)<br>
if response.status_code == 200:<br>
root_node = json.loads(response.text)<br>
return root_node['data']['translate']<br>
else:<br>
return None<br>
<br>
<br>
def process_batch(sheet, start, end):<br>
for row_index in range(start, end):<br>
row = sheet[row_index]<br>
desc_cell = row[0]<br>
if desc_cell.value:<br>
translated_text = translate_text(desc_cell.value)<br>
if translated_text:<br>
sheet.cell(row=row_index, column=2, value=translated_text)<br>
print(f"读取到第 {row_index} 条记录")<br>
print(f"写入到第 {row_index} 条记录")<br>
<br>
<br>
def main():<br>
excel_file_path = "/Users/larryzheng/Desktop/blog.xlsx"<br>
workbook = openpyxl.load_workbook(excel_file_path)<br>
sheet = workbook.active<br>
<br>
row_count = sheet.max_row<br>
batch_count = (row_count + BATCH_SIZE - 1) // BATCH_SIZE<br>
<br>
with concurrent.futures.ThreadPoolExecutor(max_workers=THREAD_COUNT) as executor:<br>
futures = []<br>
for batch in range(batch_count):<br>
start = batch * BATCH_SIZE<br>
end = min(start + BATCH_SIZE, row_count)<br>
futures.append(executor.submit(process_batch, sheet, start, end))<br>
<br>
# 等待所有任务完成<br>
for future in concurrent.futures.as_completed(futures):<br>
try:<br>
future.result()<br>
except Exception as e:<br>
print(e)<br>
<br>
workbook.save(excel_file_path)<br>
workbook.close()<br>
<br>
<br>
if __name__ == "__main__":<br>
main()
- 批量翻译效果如下: