网站首页 > 技术文章 正文
大家好,我是Jack Bytes,一个专注于将人工智能应用于日常生活的程序猿,平时主要分享AI、NAS、开源项目等。
最近很多人问我怎么识别PDF格式的书籍并转换为其他可以编辑的格式,目前主流的商业软件其实都支持这个功能,但基本都需要收费。
今天给大家介绍一款开源项目:pdf-craft,能够将PDF文件转换为各种其他格式,下面我们一起来看下吧!
项目介绍
pdf-craft是一个开源的PDF处理项目,能够把pdf转换为其他格式,并支持将PDF一页一页读出,使用AI模型将pdf中的正文提取出来,并过滤掉页眉、页脚、脚注、页码等元素。并且还会使用算法判断前后文跨页衔接的问题,生成语义通顺的文本。
使用的主要技术:
- OCR文本识别技术
- Layoutreader模型
- 大语言模型
安装
在安装之前,需要准备好python 3.10以上的环境,然后执行下面的命令进行安装:
pip install pdf-craft
pip install onnxruntime==1.21.0
GPU加速
如果你有GPU设备,并且希望使用GPU进行加速,可以先确保已经准备好CUDA环境,然后把上面的pip install onnxruntime==1.21.0替换成下面的命令:
pip install onnxruntime-gpu==1.21.0
功能
PDF转为MarkDown
这个功能无需调用远程LLM,只需要本地算力即可完成,需要注意的是第一次调用会联网下载所需的模型,如果遇到插入、表格、公式,会直接截图插入到MarkDown文件中。如下面的代码所示:
from pdf_craft import PDFPageExtractor, MarkDownWriter
extractor = PDFPageExtractor(
device="cpu", # 如果希望使用 CUDA,请改为 device="cuda" 这样的格式。
model_dir_path="/path/to/model/dir/path", # AI 模型下载和安装的文件夹地址
)
with MarkDownWriter(markdown_path, "images", "utf-8") as md:
for block in extractor.extract(pdf="/path/to/pdf/file"):
md.write(block)
转化效果如下:
PDF转化为EPUB
前面的操作和上面一样,使用OCR从PDF中扫描并识别文字:
from pdf_craft import PDFPageExtractor
extractor = PDFPageExtractor(
device="cpu", # 如果希望使用 CUDA,请改为 device="cuda" 这样的格式。
model_dir_path="/path/to/model/dir/path", # AI 模型下载和安装的文件夹地址
)
然后,配置LLM模型,作者推荐使用DeepSeek:
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")
)
然后就可以开始扫描并分析书籍了:
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", # 分析结果将写入这个文件夹
)
分析结束之后,把output_dir_path文件夹传给下面的代码作为参数,即可生成EPUB文件:
from pdf_craft import generate_epub_file
generate_epub_file(
from_dir_path=output_dir_path, # 来自上一步分析所产生的文件夹
epub_file_path="/path/to/output/epub", # 生成的 EPUB 文件保存路径
)
效果如下图:
进阶功能
这个项目还有一些进阶功能,如多重OCR、LLM进阶等等,可以进一步提高识别的质量,大家感兴趣的可以去试试!
我是Jack Bytes
一个专注于将人工智能应用于日常生活的半吊子程序猿!
平时主要分享AI、NAS、Docker、搞机技巧、开源项目等技术,喜欢的话请关注吧!
- 上一篇: 自己开发markdown编辑器
- 下一篇: 实战经验分享:如何撰写清晰实用的PRD文档合同管理系统
猜你喜欢
- 2025-07-23 零基础入门AI智能体:智能体介绍(智能体类型)
- 2025-07-23 最新PDF转markdown软件MonkeyOCR整合包,文档图片解析工具
- 2025-07-23 Python轻松实现markdown转网页,完美支持mermaid图表、latex公式
- 2025-07-23 iPadOS 26备忘录再升级:支持通话录音转录、Markdown导出
- 2025-07-23 一款能打破 Markdown 天花板的神器 —— Quarkdown
- 2025-07-23 网上的好文章,一键转存成 Markdown,永久阅读!
- 2025-04-26 3款 .NET 开源的编辑器,包含代码、文本和Markdown编辑功能!
- 2025-04-26 Markdown 格式如何转换成 Word?
- 2025-04-26 jupyter lab修改默认文件目录
- 2025-04-26 一款优秀的微信Markdown编辑神器及私有化部署流程
- 1522℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 647℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 527℃MySQL service启动脚本浅析(r12笔记第59天)
- 492℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 492℃启用MySQL查询缓存(mysql8.0查询缓存)
- 479℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 461℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 459℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- windowsscripthost (69)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)