Free PDF to Word Converter
Project description
FreeP2W - Free PDF to Word Converter
简介
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) │
└─────────────────┴───────────────┴───────────────────────────┘
工作流程
- 文档分析: 使用 DocLayout-YOLO 检测 PDF 中的布局元素(文本、图片、公式、表格)
- 公式识别: 对检测到的公式区域使用 UniMERNet 进行识别并转换为 MathML
- 内容提取: 使用 pdf2docx 提取文本、表格等内容
- 文档合成: 将所有识别结果合并生成最终的 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
手动下载模型
如果自动下载失败,可以手动下载模型文件:
-
YOLO 模型:
https://github.com/zstar1003/FreeP2W/releases/download/v0.0.1/doclayout_yolo_docstructbench_imgsz1024.pt放置到:
~/.freep2w/weights/doclayout_yolo_docstructbench_imgsz1024.pt -
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)
- 自定义模型训练
贡献指南
欢迎贡献代码、报告问题或提出建议!
如何贡献
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启 Pull Request
报告问题
请在 GitHub Issues 提交问题报告。
提交前请确认:
- 搜索是否有相同的问题已被报告
- 提供详细的错误信息和复现步骤
- 附上系统环境信息(操作系统、Python 版本等)
致谢
本项目使用了以下开源项目:
- DocLayout-YOLO - 文档布局检测
- UniMERNet - 数学公式识别
- pdf2docx - PDF 到 DOCX 转换
- PyMuPDF - PDF 文档处理
感谢这些优秀的开源项目!
许可证
本项目采用 MIT 许可证 - 详见 LICENSE 文件。
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
66a19877f35a5d39ed1cc3b5e2467fa4137e1181e6c20bc32ea172aab62524b8
|
|
| MD5 |
4baf0f3ef887fb18ce0941747f4f2ffb
|
|
| BLAKE2b-256 |
cceaaada643be06f3421ef149b2101ffb1a4f0cb1235c7f255a07fb34ec24c8c
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7f5f212a9b8815f58c1b5aaa7b3354b8daf0ae32d2f22af42b74c6b95a10b536
|
|
| MD5 |
93cd0164d619f504afbeca6aaaa543e2
|
|
| BLAKE2b-256 |
04729ae69829234fc6bdc70248e7defe8e28b98b5053299ad2d19f04a7ded2e6
|