做一个英文PDF转化为中文PDF的系统

以下是基于本地模型的PDF翻译系统的完整设计和代码实现,支持术语表的导入,并保留PDF的原有格式。

系统设计概述

本系统的目标是将英文PDF文件翻译成中文,并保持原有的排版和格式(如字体、图片、表格等)不变,同时支持导入术语表,确保特定的术语得到精确翻译。

功能模块
  1. PDF 文件解析模块

    • 负责解析PDF文件,提取文本、段落、图像、表格等信息,并保留其格式。
  2. 术语表管理模块

    • 支持用户上传术语表(CSV 或 Excel 格式),将特定的术语及其翻译映射存储在字典中。
  3. 本地翻译模型模块

    • 使用 Hugging Face 提供的 MarianMT 或 mBART 模型进行本地翻译,不依赖在线API。
  4. 格式重建与PDF生成模块

    • 在翻译完成后,按照原有的PDF格式生成新的PDF文件,保持翻译后的内容与原文件一致。
  5. 优化与扩展

    • 系统支持异步任务处理,能够高效处理大文件,并为不同行业配置不同的术语表。

代码实现

1. PDF 解析模块

使用 PyMuPDF 提取文本并保留格式。

python 复制代码
import pymupdf

def extract_text_from_pdf(pdf_path):
    doc = pymupdf.open(pdf_path)
    pdf_content = []
    for page_num in range(len(doc)):
        page = doc.load_page(page_num)
        text = page.get_text("text")
        blocks = page.get_text("dict")["blocks"]
        pdf_content.append({
            "text": text,
            "blocks": blocks,  # 用于保留格式信息
        })
    return pdf_content



if __name__ == '__main__':

    context=extract_text_from_pdf("pdftest.pdf")
    print(context)
2. 术语表管理模块

从 CSV 或 Excel 文件导入术语表,并使用字典存储术语的映射。

python 复制代码
import pandas as pd

def load_terms(terms_file):
    # 假设术语表格式是英文列和中文列
    terms_df = pd.read_csv(terms_file)  # 可扩展为Excel
    terms_dict = dict(zip(terms_df['English'], terms_df['Chinese']))
    return terms_dict

def replace_terms(text, terms_dict):
    # 替换文本中的术语
    for eng_term, zh_term in terms_dict.items():
        text = text.replace(eng_term, zh_term)
    return text
3. 本地翻译模型模块

加载 MarianMT 模型,进行英文到中文的翻译。

python 复制代码
from transformers import MarianMTModel, MarianTokenizer

def load_translation_model():
    model_name = 'Helsinki-NLP/opus-mt-en-zh'
    tokenizer = MarianTokenizer.from_pretrained(model_name)
    model = MarianMTModel.from_pretrained(model_name)
    return tokenizer, model

def translate_text(text, tokenizer, model):
    tokenized_text = tokenizer(text, return_tensors="pt", padding=True, truncation=True)
    translated_tokens = model.generate(**tokenized_text)
    translated_text = tokenizer.decode(translated_tokens[0], skip_special_tokens=True)
    return translated_text
4. 翻译结合术语表

在翻译文本前先用术语表替换术语,再用本地模型翻译其余文本。

python 复制代码
def translate_with_terms(text, terms_dict, tokenizer, model):
    # 先进行术语替换
    text_with_terms = replace_terms(text, terms_dict)
    # 对剩余文本进行翻译
    translated_text = translate_text(text_with_terms, tokenizer, model)
    return translated_text
5. 保持格式生成PDF

使用 PyMuPDF 结合翻译后的文本生成新的 PDF,保持原有排版和格式。

python 复制代码
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter

def generate_translated_pdf(translated_content, output_pdf_path):
    c = canvas.Canvas(output_pdf_path, pagesize=letter)

    # 假设每页使用相同的格式信息,重绘文本
    for page in translated_content:
        for block in page['blocks']:
            x, y = block['bbox'][:2]  # 假设使用边界框信息确定文本位置
            translated_text = block['text']
            c.drawString(x, y, translated_text)  # 重新绘制文本

    c.save()
6. 主流程

整合上述模块,形成翻译流程。

python 复制代码
def main(pdf_path, terms_file, output_pdf_path):
    # 步骤 1: 解析 PDF 文件
    pdf_content = extract_text_from_pdf(pdf_path)

    # 步骤 2: 导入术语表
    terms_dict = load_terms(terms_file)

    # 步骤 3: 加载本地翻译模型
    tokenizer, model = load_translation_model()

    # 步骤 4: 翻译内容并保留格式
    translated_content = []
    for page in pdf_content:
        translated_page = {
            "blocks": []
        }
        for block in page["blocks"]:
            translated_text = translate_with_terms(block['text'], terms_dict, tokenizer, model)
            translated_block = {
                "bbox": block['bbox'],  # 保留位置
                "text": translated_text
            }
            translated_page["blocks"].append(translated_block)
        translated_content.append(translated_page)

    # 步骤 5: 生成翻译后的 PDF 文件
    generate_translated_pdf(translated_content, output_pdf_path)

系统功能说明

  1. 术语表支持:通过导入用户定义的术语表,在翻译时优先处理特定词汇,确保术语翻译的准确性。

  2. 本地模型:使用本地的 MarianMT 模型进行高效翻译,不依赖在线API,保证隐私与数据安全。

  3. 格式保留:在翻译完成后,PDF的段落、字体、表格等格式保持不变,生成的PDF文件与原文件视觉效果一致。

  4. 可扩展性:可以扩展为支持更多翻译模型(如 mBART),并处理复杂的 PDF 元素(如图像、表格等)。


进一步优化建议

  • 并行处理:对于大型PDF文件,可以对每一页的文本翻译过程并行化,以提高效率。
  • 文本块优化:在提取文本时,可以对文本进行预处理(如去除多余的空格、断行符等),以提高翻译质量。
  • 术语表管理:为用户提供术语表的编辑和维护界面,使得系统能针对不同行业或领域定制翻译内容。

通过这样的设计,你能够实现一套完整且高效的PDF翻译系统,并确保在不调用在线API的情况下,通过本地模型翻译英文PDF为中文,且保留原有格式。

相关推荐
爱喝水的鱼丶5 小时前
SAP-ABAP:SAP 简单报表输出开发系列(共6篇) 第五篇:SAP 报表多格式输出:Excel/PDF 批量导出功能实现
学习·性能优化·pdf·excel·sap·abap
cosinmz11 小时前
PDF 发票合并经验分享:月初高效整理发票的实用方法
经验分享·小程序·pdf·pdf转换·pdf发票合并·发票合并打印
一个博客11 小时前
pdf-viewer 实现预览pdf文件
开发语言·javascript·pdf
代码小库11 小时前
免费在线简历工具「面试帮」——18 款模板 + PDF 导出
面试·职场和发展·pdf
庖丁AI11 小时前
文档比对工具怎么选?Word、PDF、扫描件差异检测思路
pdf·word·扫描件·文档比对
asdzx6720 小时前
使用 Python 快速提取 PDF 中的表格
python·pdf
南风微微吹1 天前
2026英语六级作文模版万能句子PDF电子版
pdf·英语六级
又是被bug折磨的一天1 天前
对多个pdf合同文件批量命名
pdf
南风微微吹1 天前
2026年英语四级作文模版万能句子PDF电子版
pdf·英语四级
这是个假程序员1 天前
PDF分色、智能PDF黑彩识别工具
pdf