做一个英文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为中文,且保留原有格式。

相关推荐
小小大侠客1 小时前
IText创建加盖公章的pdf文件并生成压缩文件
java·pdf·itext
DevOpenClub6 小时前
PDF 转 HTML API 数据接口
pdf
zhy8103029 小时前
.net6 使用 FreeSpire.XLS 实现 excel 转 pdf - docker 部署
pdf·.net·excel
慧都小妮子10 小时前
Spire.PDF for .NET【页面设置】演示:打开 PDF 时自动显示书签或缩略图
java·pdf·.net
join813 小时前
解决vue-pdf的签章不显示问题
javascript·vue.js·pdf
小行星12513 小时前
前端把dom页面转为pdf文件下载和弹窗预览
前端·javascript·vue.js·pdf
穆友航1 天前
PDF内容提取,MinerU使用
数据分析·pdf
拾荒的小海螺2 天前
JAVA:探索 PDF 文字提取的技术指南
java·开发语言·pdf
村东头老张2 天前
Java 实现PDF添加水印
java·开发语言·pdf
好美啊啊啊啊!2 天前
Thymeleaf模板引擎生成的html字符串转换成pdf
pdf·html