网站首页 > 技术文章 正文
大家好,我是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-04-26 3款 .NET 开源的编辑器,包含代码、文本和Markdown编辑功能!
- 2025-04-26 Markdown 格式如何转换成 Word?
- 2025-04-26 jupyter lab修改默认文件目录
- 2025-04-26 一款优秀的微信Markdown编辑神器及私有化部署流程
- 2025-04-26 PDF文件转markdown格式软件Marker1.6.1版整合包下载
- 2025-04-26 Microsoft MarkItDown:使用Llama库将 Office 文件转换为 Markdown
- 2025-04-26 Web Essentials之Markdown和自定义编辑器
- 2025-04-26 只要多加这样一句提示词,就能让DeepSeek帮你生成下载各种文档!
- 2025-04-26 java使用pandoc将markdown转换为word文档
- 2025-04-26 android上的markdown软件比较
- 04-29kali2021ping 外网不通
- 04-29我是如何用这3个小工具,助力小姐姐提升100%开发效率的
- 04-29注册下载啊
- 04-29Spring 中三种 BeanName 生成器!
- 04-29mysql学习9:创建数据库
- 04-29Linux之yum源详解
- 04-29夏日终曲/请以你的名字呼唤我/Call me by your name(无剧透)
- 04-29注释竟然还有特殊用途?一文解惑 //go:linkname 指令
- 最近发表
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- sqlset (59)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)