本公众号主要关注NLP、CV、LLM、RAG、Agent等AI前沿技术,免费分享业界实战案例与课程,助力您全面拥抱AIGC。
PDF-Craft实战
-
将 PDF 转换为 MarkDown
from pdf_craft import PDFPageExtractor, MarkDownWriter
extractor = PDFPageExtractor(
device="cpu", # If you want to use CUDA, please change to device="cuda:0" format.
model_dir_path="/path/to/model/dir/path", # The folder address where the AI model is downloaded and installed
)
with MarkDownWriter(markdown_path, "images", "utf-8") as md:
for block in extractor.extract(pdf="/path/to/pdf/file"):
md.write(block)
如果原始 PDF 中有插图(或表格、公式),则会在与保存图像相同的级别创建一个目录。
目录中的图片将在 MarkDown 文件中以相对地址的形式被引用。*.md``assets``*.md``assets
-
将 PDF 转换为 EPUB
首先创建PDF抽取对象
extractor = PDFPageExtractor(
device="cpu", # If you want to use CUDA, please change to device="cuda:0" format.
model_dir_path="/path/to/model/dir/path", # The folder address where the AI model is downloaded and installed
)
将抽取的内容送给LLM,生成EPUB文件
from pdf_craft import analyse
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")
)
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", # 分析结果将写入这个文件夹
)
-
output_dir_path
,表示扫描和分析的结果(会有多个文件)应该保存在哪个文件夹。 -
analysing_dir_path
,用来存储分析过程中的中间状态。 -
在分析结束后,将
output_dir_path
文件夹地址传给如下代码作为参数,即可最终生成 EPUB 文件。

pdf-craft主要功能:
-
使用本地 AI 模型将 PDF 转换为 Markdown 格式,无需联网 -
支持将 PDF 转换为带结构的 EPUB 电子书格式 -
智能识别并过滤页眉、页脚、脚注、页码等干扰元素 -
自动处理图表、公式,以图片形式保留在转换后的文件中 -
结合 LLM 技术构建书籍结构,生成带目录和章节的 EPUB
pdf-craft的转化逻辑

首先,将PDF分页拆解成图片
其次,利用DocLayout-YOLO识别图片中的block元素,包括:页眉、页脚、段落、标题、图片、表格、图表、页码等信息
然后,利用layoutreader对block进行排序
接着,利用OnnxOCR,识别block中的文字
最后,将OCR识别的文字,输送给Deepseek,并通过特定信息(比如目录等)来构建书本的结构,最终生成带目录,分章节的 EPUB 文件。
这个解析和构建的过程中,会通过 LLM 读取每页的注释和引用信息,然后在 EPUB 文件中以新的格式呈现。
“
https://github.com/oomol-lab/pdf-craft/tree/main