怎样用脚本批量翻译文档?

wen 实用脚本 2

本文目录导读:

怎样用脚本批量翻译文档?

  1. 使用免费API(适合小批量)
  2. 使用DeepL API(更专业,需付费)
  3. 处理多种文档格式(Word, PDF等)
  4. 批量处理 + 进度显示
  5. 使用命令行工具(最简单)
  6. 注意事项
  7. 推荐方案

我来介绍几种批量翻译文档的脚本方法,从简单到专业:

使用免费API(适合小批量)

Python + Google翻译(无需API密钥)

from googletrans import Translator
import os
from pathlib import Path
def batch_translate_folder(input_folder, output_folder, src_lang='auto', dest_lang='zh-cn'):
    translator = Translator()
    # 创建输出文件夹
    Path(output_folder).mkdir(parents=True, exist_ok=True)
    # 遍历所有txt文件
    for file_path in Path(input_folder).glob('*.txt'):
        with open(file_path, 'r', encoding='utf-8') as f:
            content = f.read()
        # 翻译内容(注意:有长度限制)
        translated = translator.translate(content, src=src_lang, dest=dest_lang)
        # 保存翻译结果
        output_path = Path(output_folder) / f"translated_{file_path.name}"
        with open(output_path, 'w', encoding='utf-8') as f:
            f.write(translated.text)
        print(f"已翻译: {file_path.name}")
# 使用示例
batch_translate_folder('input_docs', 'output_docs')

使用DeepL API(更专业,需付费)

import deepl
import os
def translate_with_deepl():
    # 注册获取API密钥:https://www.deepl.com/pro-api
    auth_key = "你的API密钥"
    translator = deepl.Translator(auth_key)
    input_dir = "documents"
    output_dir = "translated_documents"
    for filename in os.listdir(input_dir):
        if filename.endswith(('.txt', '.docx', '.pdf')):
            input_path = os.path.join(input_dir, filename)
            # 读取文件
            with open(input_path, 'r', encoding='utf-8') as f:
                text = f.read()
            # 翻译(支持批量处理)
            result = translator.translate_text(
                text, 
                source_lang="EN",
                target_lang="ZH"
            )
            # 保存结果
            output_path = os.path.join(output_dir, f"zh_{filename}")
            with open(output_path, 'w', encoding='utf-8') as f:
                f.write(result.text)
# 使用示例
translate_with_deepl()

处理多种文档格式(Word, PDF等)

from docx import Document
import PyPDF2
from googletrans import Translator
class MultiFormatTranslator:
    def __init__(self):
        self.translator = Translator()
    def translate_word(self, input_path, output_path, target_lang='zh-cn'):
        doc = Document(input_path)
        for paragraph in doc.paragraphs:
            if paragraph.text.strip():
                try:
                    translated = self.translator.translate(
                        paragraph.text, 
                        dest=target_lang
                    )
                    paragraph.text = translated.text
                except:
                    print(f"警告: 无法翻译段落: {paragraph.text[:50]}...")
        doc.save(output_path)
    def translate_pdf(self, input_path, output_path, target_lang='zh-cn'):
        # 读取PDF
        with open(input_path, 'rb') as file:
            pdf_reader = PyPDF2.PdfReader(file)
            text = ""
            for page in pdf_reader.pages:
                text += page.extract_text()
        # 分段翻译(避免超长限制)
        chunks = [text[i:i+5000] for i in range(0, len(text), 5000)]
        translated_chunks = []
        for chunk in chunks:
            translated = self.translator.translate(chunk, dest=target_lang)
            translated_chunks.append(translated.text)
        # 保存为txt
        with open(output_path.replace('.pdf', '.txt'), 'w', encoding='utf-8') as f:
            f.write(''.join(translated_chunks))
# 使用示例
translator = MultiFormatTranslator()
translator.translate_word('input.docx', 'output.docx')
translator.translate_pdf('input.pdf', 'output.pdf')

批量处理 + 进度显示

import os
from concurrent.futures import ThreadPoolExecutor, as_completed
from tqdm import tqdm
from googletrans import Translator
def translate_file(file_path, output_dir, target_lang='zh-cn'):
    translator = Translator()
    try:
        with open(file_path, 'r', encoding='utf-8') as f:
            content = f.read()
        # 翻译
        result = translator.translate(content, dest=target_lang)
        # 保存
        output_path = os.path.join(output_dir, f"translated_{os.path.basename(file_path)}")
        with open(output_path, 'w', encoding='utf-8') as f:
            f.write(result.text)
        return True, file_path
    except Exception as e:
        return False, f"{file_path}: {str(e)}"
def batch_translate_parallel(input_dir, output_dir, max_workers=5):
    # 创建输出目录
    os.makedirs(output_dir, exist_ok=True)
    # 获取所有txt文件
    files = [os.path.join(input_dir, f) for f in os.listdir(input_dir) 
             if f.endswith('.txt')]
    # 多线程并行处理
    with ThreadPoolExecutor(max_workers=max_workers) as executor:
        futures = {executor.submit(translate_file, file, output_dir): file 
                   for file in files}
        # 显示进度条
        for future in tqdm(as_completed(futures), total=len(files), desc="翻译进度"):
            success, msg = future.result()
            if not success:
                print(f"失败: {msg}")
# 使用示例
batch_translate_parallel('input_folder', 'output_folder')

使用命令行工具(最简单)

安装 trans 工具

# 安装
pip install translate-shell
# 批量翻译所有txt文件
for file in *.txt; do
    trans :zh "$file" > "translated_$file"
done

注意事项

  1. API限制:免费API有每日使用限额
  2. 大文件处理:建议分段处理,每段不超过5000字符
  3. 格式保持:Word/PDF可能丢失格式
  4. 质量验证:建议抽样检查翻译质量

推荐方案

  • 小批量免费:使用Google翻译(googletrans库)
  • 专业商用:使用DeepL API或百度翻译API
  • 大量处理:使用Ray或Dask分布式处理框架
  • GUI工具:可以使用OmegaT或Crowdin等专业翻译工具

需要我帮你实现特定格式文档(如Word、Excel、PDF)的批量翻译脚本吗?

抱歉,评论功能暂时关闭!