Skip to main content

Free PDF to Word Converter

Project description

FreeP2W - Free PDF to Word Converter

📄 一个基于深度学习的高质量 PDF 转 Word 工具

Python PyPI License

功能特性快速开始使用方法技术架构常见问题


简介

FreeP2W 是一款基于深度学习的 PDF 到 Word 转换工具,结合了最先进的文档布局分析和公式识别技术,能够高质量地将 PDF 文档转换为可编辑的 Word 文档。

核心优势

  • 🎯 高精度识别: 使用 DocLayout-YOLO 进行精准的文档布局检测
  • 🔬 公式识别: 集成 UniMERNet 实现数学公式的精确识别和转换
  • 📊 表格保留: 完整保留原文档的表格结构和格式
  • 🖼️ 图片处理: 智能提取和定位文档中的图片
  • 一键转换: 简单的命令行界面,无需复杂配置
  • 🔄 自动下载: 首次运行自动下载所需模型文件

功能特性

✨ 主要功能

  • 文本提取: 高质量的文本内容提取,保留原有格式
  • 公式转换: 将 PDF 中的数学公式转换为可编辑的 MathML 格式
  • 图片定位: 精确识别和提取文档中的图片
  • 表格识别: 保留表格结构和单元格内容
  • 布局还原: 尽可能还原原文档的版面布局

🚀 技术栈

  • DocLayout-YOLO: 文档元素检测(图片、公式、表格等)
  • UniMERNet: 数学公式识别和转换
  • pdf2docx: PDF 到 DOCX 的基础转换
  • PyMuPDF (fitz): PDF 文档解析

快速开始

系统要求

  • Python 3.8 或更高版本
  • Windows / Linux / macOS
  • 至少 4GB 可用磁盘空间(用于存储模型文件)
  • 推荐使用 GPU(可选,CPU 也可运行)

安装

方式 1: 从 PyPI 安装(推荐)

pip install freep2w

方式 2: 从源码安装

# 克隆仓库
git clone https://github.com/zstar1003/FreeP2W.git
cd FreeP2W

# 安装依赖
pip install -e .

首次运行

首次运行时,FreeP2W 会自动下载所需的模型文件:

  • YOLO 模型 (~39 MB): 文档布局检测模型
  • UniMERNet 模型 (~1.6 GB): 数学公式识别模型

模型文件会被下载到用户目录:

  • Windows: C:\Users\<用户名>\.freep2w\weights\
  • Linux/Mac: ~/.freep2w/weights/

使用方法

命令行界面

基本用法

# 转换 PDF 文件(输出文件名自动生成)
freep2w input.pdf

# 指定输出文件名
freep2w input.pdf -o output.docx

# 完整路径示例
freep2w /path/to/input.pdf -o /path/to/output.docx

命令行参数

freep2w [-h] [-o OUTPUT] [-v] input

位置参数:
  input                 输入 PDF 文件路径

可选参数:
  -h, --help            显示帮助信息
  -o OUTPUT, --output OUTPUT
                        输出 DOCX 文件路径(可选)
  -v, --version         显示版本号

Python API

from freep2w.cli import convert_pdf_to_docx

# 转换 PDF 文件
success = convert_pdf_to_docx(
    pdf_path='input.pdf',
    output_path='output.docx'
)

if success:
    print("转换成功!")
else:
    print("转换失败!")

使用示例

示例: 转换学术论文

freep2w research_paper.pdf -o paper_converted.docx

技术架构

系统架构

┌─────────────────────────────────────────────────────────────┐
│                        FreeP2W CLI                          │
└─────────────────┬───────────────────────────────────────────┘
                  │
                  ▼
┌─────────────────────────────────────────────────────────────┐
│                   HybridConverter                           │
├─────────────────┬───────────────┬───────────────────────────┤
│                 │               │                           │
│   DocLayout     │  UniMERNet    │      pdf2docx            │
│     YOLO        │   Formula     │   Text/Table             │
│  (Layout Det.)  │   (Formula)   │   (Extraction)           │
└─────────────────┴───────────────┴───────────────────────────┘

工作流程

  1. 文档分析: 使用 DocLayout-YOLO 检测 PDF 中的布局元素(文本、图片、公式、表格)
  2. 公式识别: 对检测到的公式区域使用 UniMERNet 进行识别并转换为 MathML
  3. 内容提取: 使用 pdf2docx 提取文本、表格等内容
  4. 文档合成: 将所有识别结果合并生成最终的 DOCX 文件

模型说明

DocLayout-YOLO

  • 功能: 文档布局元素检测
  • 大小: 39 MB
  • 来源: DocLayout-YOLO
  • 检测类别: 图片、公式、表格、标题、段落等

UniMERNet

  • 功能: 数学公式识别
  • 大小: ~1.6 GB
  • 来源: UniMERNet
  • 输出格式: MathML / LaTeX

配置说明

模型路径配置

FreeP2W 会自动管理模型文件,但您也可以手动配置:

用户目录结构:

~/.freep2w/
└── weights/
    ├── doclayout_yolo_docstructbench_imgsz1024.pt  # YOLO 模型
    ├── demo.yaml                                    # 配置文件
    └── unimernet_small/                             # UniMERNet 模型
        ├── config.json
        ├── preprocessor_config.json
        ├── tokenizer.json
        ├── tokenizer_config.json
        └── unimernet_small.pth

手动下载模型

如果自动下载失败,可以手动下载模型文件:

  1. YOLO 模型:

    https://github.com/zstar1003/FreeP2W/releases/download/v0.0.1/doclayout_yolo_docstructbench_imgsz1024.pt
    

    放置到: ~/.freep2w/weights/doclayout_yolo_docstructbench_imgsz1024.pt

  2. UniMERNet 模型:

    https://github.com/zstar1003/FreeP2W/releases/download/v0.0.1/unimernet_small.zip
    

    解压到: ~/.freep2w/weights/unimernet_small/


常见问题

Q1: 首次运行时下载很慢怎么办?

A: UniMERNet 模型文件较大(~1.6GB),下载时间取决于网络速度。建议:

Q2: 转换失败提示找不到模型?

A: 检查以下几点:

# 检查模型目录是否存在
ls ~/.freep2w/weights/

# 重新下载模型
python -m freep2w.model_downloader

Q3: 如何提高转换质量?

A:

  • 确保 PDF 质量较高(非扫描版)
  • 对于扫描版 PDF,建议先进行 OCR 处理
  • 复杂公式可能需要手动调整

Q4: 支持批量转换吗?

A: 支持。参见示例 2: 批量转换

Q6: 转换后的格式有问题?

A:

  • PDF 到 Word 的转换是一个复杂过程,完美还原较困难
  • 转换后建议手动检查和调整格式
  • 对于重要文档,建议对比原文进行校对

开发说明

项目结构

FreeP2W/
├── freep2w/                     # 主包
│   ├── __init__.py             # 包初始化
│   ├── cli.py                  # 命令行接口
│   ├── hybrid_converter.py     # 混合转换器
│   ├── model_downloader.py     # 模型下载器
│   └── demo.yaml               # 配置模板
├── doclayout_yolo/              # YOLO 模块(本地)
├── pdf2docx/                    # PDF2DOCX 模块(本地)
├── unimernet/                   # UniMERNet 模块(本地)
├── setup.py                     # 安装配置
├── pyproject.toml               # 项目配置
├── requirements.txt             # 依赖列表
└── README.md                    # 本文件

从源码运行

# 克隆仓库
git clone https://github.com/zstar1003/FreeP2W.git
cd FreeP2W

# 安装开发模式
pip install -e .

# 运行测试
freep2w test.pdf -o output.docx

运行测试

# 测试模型下载
python -m freep2w.model_downloader

# 测试转换功能
freep2w test_files/sample.pdf -o test_output.docx

性能指标

转换速度

PDF 页数 CPU (Intel i7) GPU (NVIDIA RTX 3060)
1-10 页 ~30-60 秒 ~10-20 秒
10-50 页 ~2-5 分钟 ~30-90 秒
50-100 页 ~5-15 分钟 ~2-5 分钟

注: 实际速度取决于文档复杂度和硬件配置

识别准确率

  • 文本识别: >95%(非扫描版 PDF)
  • 公式识别: ~90%(简单公式),~75%(复杂公式)
  • 表格识别: ~85%(结构简单),~70%(结构复杂)
  • 布局还原: ~80%

路线图

当前版本 (v1.0.0)

  • ✅ 基础 PDF 到 Word 转换
  • ✅ 公式识别和转换
  • ✅ 图片提取和定位
  • ✅ 表格识别
  • ✅ 自动模型下载

计划功能

  • GUI 图形界面
  • 批量转换工具
  • 云端 API 服务
  • 更多格式支持(PDF → Markdown, HTML 等)
  • OCR 支持(扫描版 PDF)
  • 自定义模型训练

贡献指南

欢迎贡献代码、报告问题或提出建议!

如何贡献

  1. Fork 本仓库
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 开启 Pull Request

报告问题

请在 GitHub Issues 提交问题报告。

提交前请确认:

  • 搜索是否有相同的问题已被报告
  • 提供详细的错误信息和复现步骤
  • 附上系统环境信息(操作系统、Python 版本等)

致谢

本项目使用了以下开源项目:

感谢这些优秀的开源项目!


许可证

本项目采用 MIT 许可证 - 详见 LICENSE 文件。

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

freep2w-1.0.1.tar.gz (655.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

freep2w-1.0.1-py3-none-any.whl (815.1 kB view details)

Uploaded Python 3

File details

Details for the file freep2w-1.0.1.tar.gz.

File metadata

  • Download URL: freep2w-1.0.1.tar.gz
  • Upload date:
  • Size: 655.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.18

File hashes

Hashes for freep2w-1.0.1.tar.gz
Algorithm Hash digest
SHA256 66a19877f35a5d39ed1cc3b5e2467fa4137e1181e6c20bc32ea172aab62524b8
MD5 4baf0f3ef887fb18ce0941747f4f2ffb
BLAKE2b-256 cceaaada643be06f3421ef149b2101ffb1a4f0cb1235c7f255a07fb34ec24c8c

See more details on using hashes here.

File details

Details for the file freep2w-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: freep2w-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 815.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.18

File hashes

Hashes for freep2w-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 7f5f212a9b8815f58c1b5aaa7b3354b8daf0ae32d2f22af42b74c6b95a10b536
MD5 93cd0164d619f504afbeca6aaaa543e2
BLAKE2b-256 04729ae69829234fc6bdc70248e7defe8e28b98b5053299ad2d19f04a7ded2e6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page