Open
Description
项目地址
https://github.com/oomol-lab/pdf-craft
类别
Python
项目标题
支持将 PDF 转成 EPUB,对图片进行 OCR,并且用 AI 重建索引和引用标注
项目描述
PDF Craft 可以将 PDF 文件转化为各种其他格式。该项目将专注于扫描书籍的 PDF 文件的处理。
本项目可将 PDF 一页一页读出,并使用 DocLayout-YOLO 混合一个内置算法,将书页中的正文提取出来,并过滤掉页眉、页脚、脚注、页码等元素。在跨页过程中,会使用算法判断以妥善处理前后文跨页顺接问题,最终生成语义通顺的文本。书页会使用 OnnxOCR 进行文本识别。并使用 layoutreader 来确定符合人类习惯的阅读顺序。
仅靠以上这些可在本地执行的 AI 模型(使用本地显卡设备来加速),便可将 PDF 文件转化为 Markdown 格式。这适应于论文或小书本。
但若要解析书籍(一般页数超过 100 页),建议将其转化为 EPUB 格式的文件。转化过程中,本库会将本地 OCR 识别出的数据传给 LLM,并通过特定信息(比如目录等)来构建书本的结构,最终生成带目录,分章节的 EPUB 文件。这个解析和构建的过程中,会通过 LLM 读取每页的注释和引用信息,然后在 EPUB 文件中以新的格式呈现。此外 LLM 还能在一定程度上校正 OCR 的错误。这一步骤无法全在本地执行,你需要配置 LLM 服务,推荐使用 DeepSeek,本库的 Prompt 基于 V3 模型调试。
亮点
- PDF 转 EPUB 电子书
- OCR 识别文本,对质量较差的扫描书也支持
- 用 AI 构建目录
- 用 AI 建立文章引用关系
- 生成 EPUB 以及 MD
示例代码
### PDF 转化为 EPUB
此操作的前半部分与 PDF 转化 MarkDown(见前章节)相同,将使用 OCR 从 PDF 中扫描并识别文字。因此,也需要先构建 `PDFPageExtractor` 对象。
from pdf_craft import create_pdf_page_extractor, PDFPageExtractor
extractor: PDFPageExtractor = create_pdf_page_extractor(
device="cpu", # 如果希望使用 CUDA,请改为 device="cuda" 这样的格式。
model_dir_path="/path/to/model/dir/path", # AI 模型下载和安装的文件夹地址
)
之后,需要配置 `LLM` 对象。建议使用使用 [DeepSeek](https://www.deepseek.com/),本库的 Prompt 基于 V3 模型调试。
from pdf_craft import LLM
llm = LLM(
key="sk-XXXXX", # LLM 供应商提供的 key
url="https://api.deepseek.com", # LLM 供应商提供的 URL
model="deepseek-chat", # LLM 供应商提供的模型
token_encoding="o200k_base", # 进行 tokens 估算的本地模型名(与 LLM 无关,若不关心就保留 "o200k_base")
)
如上两个对象准备好后,就可以开始扫描并分析 PDF 书籍了。
from pdf_craft import analyse
analyse(
llm=llm, # 上一步准备好的 LLM 配置
pdf_page_extractor=pdf_page_extractor, # 上一步准备好的 PDFPageExtractor 对象
pdf_path="/path/to/pdf/file", # PDF 文件路径
analysing_dir_path="/path/to/analysing/dir", # analysing 文件夹地址
output_dir_path="/path/to/output/files", # 分析结果将写入这个文件夹
)
截图或演示视频
视频地址:https://www.youtube.com/watch?v=1yYBCVry77I


Metadata
Metadata
Assignees
Labels
No labels