文档自动化处理:HTML/PDF 转换工具链实践

在日常工作中,经常需要处理中英双语文档——将同时包含中英文的内容转换为纯中文版本,同时保留专业术语的英文原名。手动处理效率低下且容易出错,因此我构建了一套自动化的文档转换工具链。

📌 核心需求

输入:中英双语的 HTML/PDF 文档 → 输出:纯中文版本,专业术语保留英文原名,文档格式与原版对齐。

工具链架构

整个处理流程分为五个步骤:

  1. 文档解析:读取 HTML/PDF 文件,提取文本内容和结构
  2. 语言检测:识别每个文本段落的语言类型(中文/英文/混合)
  3. 内容过滤:根据规则移除英文内容,保留中文和专业术语
  4. 格式重建:将处理后的内容重新组装为与原版一致的格式
  5. 输出导出:支持 HTML 和 PDF 两种输出格式

核心实现

HTML 解析与处理

使用 BeautifulSoup 4 解析 HTML 文档,遍历 DOM 树,对每个文本节点进行语言检测和内容过滤。

from bs4 import BeautifulSoup
import re

def process_html(input_path: str, output_path: str, keep_terms: set):
    """处理双语 HTML 文档,保留中文和专业英文术语"""
    with open(input_path, 'r', encoding='utf-8') as f:
        soup = BeautifulSoup(f, 'html.parser')

    # 遍历所有文本节点
    for text_node in soup.find_all(string=True):
        if text_node.parent.name in ['script', 'style']:
            continue  # 跳过脚本和样式

        original = str(text_node)
        # 正则:移除英文句子(大写字母开头,包含多个单词),但保留术语
        cleaned = remove_english_sentences(original, keep_terms)
        text_node.replace_with(cleaned)

    with open(output_path, 'w', encoding='utf-8') as f:
        f.write(str(soup))

def remove_english_sentences(text: str, keep_terms: set) -> str:
    """移除英文句子,但保留指定的专业术语"""
    # 先标记要保留的术语
    for i, term in enumerate(keep_terms):
        text = text.replace(term, f'__KEEP_{i}__')

    # 移除纯英文句子
    sentences = re.split(r'(?<=[。!?.!?])\s*', text)
    filtered = []
    for s in sentences:
        # 如果句子中中文字符占比超过阈值,保留
        chinese_chars = len(re.findall(r'[\u4e00-\u9fff]', s))
        if chinese_chars > 0 or len(s.strip()) == 0:
            filtered.append(s)

    result = ''.join(filtered)

    # 恢复标记的术语
    for i, term in enumerate(keep_terms):
        result = result.replace(f'__KEEP_{i}__', term)

    return result

保留的专业术语

在文档处理过程中,以下类型的英文内容需要保留:

PDF 处理方案

PDF 的处理比 HTML 更复杂,因为 PDF 本身是版面描述格式而非结构化的文本格式。推荐技术栈:

步骤 工具 说明
文本提取 PyMuPDF (fitz) 提取 PDF 中的文字和位置信息
内容处理 Python 正则 语言检测和内容过滤
PDF 重建 ReportLab / WeasyPrint 生成格式化的 PDF 输出
HTML→PDF pdfkit (wkhtmltopdf) 将处理后的 HTML 转为 PDF

质量保证策略

总结

通过这套工具链,双语文档的处理效率提升了约 80%,同时保持了较高的输出质量。自动化不是要完全替代人工,而是把人工从重复劳动中解放出来,专注于需要判断力的审校环节。