V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
BlackHole1
V2EX  ›  分享创造

[开源] 扫描件 PDF 转 Markdown / EPUB,自动修复 OCR 错误

  •  3
     
  •   BlackHole1 ·
    BlackHole1 · 2 天前 · 2648 次点击

    最近我们开源了一个 PDF 处理工具 - pdf-craft,专注于解决扫描书籍 PDF 转换的痛点,让书籍数字化更智能。pdf-craft 支持将 PDF 转为 Markdown 和 EPUB ,智能处理文本、图表、公式等内容,适用于技术文档、书籍数字化、论文研究等场景。

    痛点与解决方案

    • PDF 不便于移动设备阅读:将 PDF 转为 EPUB ,适配各种屏幕大小
    • 书籍结构混乱:智能分析章节、目录,重建结构化内容
    • 注释和引用难以追踪:使用 LLM 智能处理注释和引用
    • OCR 识别错误多:结合 LLM 自动矫正识别错误
    • 扫描件 PDF 难以被 AI 、代码处理:分析并结构化 PDF 扫描件,以供 AI 、代码读取

    主要特性

    • PDF 转 Markdown

      • 纯本地运行,GPU 加速支持
      • 智能过滤页眉页脚等无关元素
      • 自动处理跨页文本顺接
      • 图表、公式自动提取为图片
    • PDF 转 EPUB

      • 智能构建书籍结构和目录
      • 提取并保留注释和引用,并在 EPUB 中以合适的方式重新组织
      • 支持中断恢复分析
      • LLM 辅助校正 OCR 错误
    • 技术亮点

    技术细节

    项目基于 Python 开发,可通过 pip 安装:

    pip install pdf-craft
    

    核心使用方法示例:

    # PDF 转 Markdown (纯本地处理)
    from pdf_craft import PDFPageExtractor, MarkDownWriter
    
    extractor = PDFPageExtractor(
      device="cuda:0",  # GPU 加速
      model_dir_path="/path/to/model/dir/path",
    )
    with MarkDownWriter(markdown_path, "images", "utf-8") as md:
      for block in extractor.extract(pdf="/path/to/pdf/file"):
        md.write(block)
    

    对于更复杂的 EPUB 转换,可以接入 LLM:

    from pdf_craft import LLM, analyse, generate_epub_file
    
    # 配置 LLM
    llm = LLM(
      key="sk-XXXXX",
      base_url="https://api.deepseek.com",
      model="deepseek-chat",
      token_encoding="o200k_base",
    )
    
    # 分析 PDF
    analyse(
      llm=llm,
      pdf_page_extractor=extractor,
      pdf_path="/path/to/pdf/file",
      analysing_dir_path="/path/to/temp",
      output_dir_path="/path/to/output",
    )
    
    # 生成 EPUB
    generate_epub_file(
      from_dir_path="/path/to/output",
      epub_file_path="/path/to/book.epub",
    )
    

    实际效果

    立即体验,无需环境配置

    想快速尝试 pdf-craft 而不想折腾环境配置?我们提供了更简单的方式: 使用 OOMOL Studio 一键体验pdf-craft for OOMOL studio

    OOMOL Studio 是我们开发的工作流 IDE ,内置了隔离的运行环境,无需复杂配置,即可立即体验 pdf-craft 的全部功能。 关于 OOMOL Studio 可以查看之前的介绍: 一款全新的工作流 IDE

    当然,pdf-craft 仍然完全开源,你依然可以按照上述方法在自己的环境中配置使用。

    适用场景

    • 技术文档阅读:将繁杂的技术文档转为结构化内容
    • 书籍数字化:把纸质扫描书转为便携的电子书
    • 论文研究:快速提取论文内容并方便引用
    • 学习材料整理:将课程讲义处理为易于学习的格式
    • 代码文档提取:从 PDF 教程中提取可用代码

    开源与社区

    项目刚刚起步,我们非常欢迎各位 V 友参与:

    如果觉得不错,欢迎给项目点个 star ⭐,有什么想法也可以在评论区交流,或者提交 PR 一起完善这个工具。

    你也可以通过 https://oomol.com/community/ 找到我们。

    43 条回复    2025-03-23 08:49:20 +08:00
    simple233
        1
    simple233  
       2 天前
    牛的,那么快又有新东西了
    uCharles
        2
    uCharles  
       2 天前
    好厉害
    chjian
        3
    chjian  
       2 天前
    大佬厉害
    regent
        4
    regent  
       2 天前
    对于爱看书的人是一个福音,谢谢!
    jimrok
        5
    jimrok  
       2 天前
    感觉现在正处在寒武纪大爆发阶段,各种新应用层出不穷。
    kitty7030
        6
    kitty7030  
       2 天前
    可以增加个功能 再转化为 pdf
    moskize
        7
    moskize  
       2 天前
    @kitty7030 反过来转化相对好做,不过我暂时不太明白这么做的应用场景有哪些?
    b821025551b
        8
    b821025551b  
       2 天前
    @moskize pdf 的兼容性更好,随便拖到浏览器就能看;这个过程就是将扫描版 pdf 转成矢量版 pdf ,提升清晰度,缩小文件体积。
    timeisweapon
        9
    timeisweapon  
       2 天前
    对于普通个人用户来说,还是在线转换工具方便
    yibie
        10
    yibie  
       2 天前
    能接 Ollama 吗?
    yazoox
        11
    yazoox  
       2 天前 via Android
    这个是真的牛逼!
    docx
        12
    docx  
       2 天前 via iPhone
    分栏的 PDF 能完美解析吗
    kitty7030
        13
    kitty7030  
       2 天前
    @moskize > 扫描件 PDF 难以被 AI 、代码处理:分析并结构化 PDF 扫描件,以供 AI 、代码读取
    扫描图片 PDF 转成 文字格式 PDF
    sunnysab
        15
    sunnysab  
       1 天前
    flowhub 中点击 Open By OMMOL Studio 没有反应(似乎只是刷新了当前页面)。
    分析了《聪明在于勤奋,天才在于积累》(华罗庚)一书,第 4 页的分数( 22/7 )没有识别成公式,整本书识别得不错,比当时导入微信读书时识别得强。
    jhytxy
        16
    jhytxy  
       1 天前 via iPhone
    求 docker 镜像
    shenjinpeng
        17
    shenjinpeng  
       1 天前
    微软貌似也有个 markitdown 专门转 PDF 的, 貌似没有 orc
    ayang23
        18
    ayang23  
       1 天前
    效果貌似不错
    EngAPI
        19
    EngAPI  
       1 天前
    不错啊,造福墨水屏
    bfdh
        20
    bfdh  
       1 天前
    model_dir_path="/path/to/model/dir/path",
    新手求问,这个应该从哪里下?
    moskize
        21
    moskize  
       1 天前
    @sunnysab 有识别公式的方案,不过第一版先用图形作为占位符,接下来准备支持公式识别。
    moskize
        22
    moskize  
       1 天前   ❤️ 2
    @bfdh 这个你在本地新建一个空文件夹,然后把地址传进去。这个文件夹里会在第一次下载模型,你就留着这个文件夹,下次运行就不会下载模型了。
    bfdh
        23
    bfdh  
       1 天前
    @moskize #22 明白了,谢谢。
    zero469
        24
    zero469  
       1 天前
    非常好的 idea ,太牛逼了
    zero469
        25
    zero469  
       1 天前
    不知道作者有没有尝试过 7B 或 32B 的 LLM ,如果效果也 OK 的话连带模型做一个纯本地的方案感觉更有吸引力
    Dreamerwwr
        26
    Dreamerwwr  
       1 天前
    在哪里配置 LLM 的 API 呢?打开后,没看到配置的位置
    KiriGiri
        27
    KiriGiri  
       1 天前
    厉害,做了我想做的。
    ration
        28
    ration  
       1 天前
    喜欢在电纸书上看书,这个真不错,谢谢
    cyp0633
        29
    cyp0633  
       1 天前   ❤️ 1
    好用,不过现在 LLM 主要是用来纠正文字吧,我觉得可以用 Gemini 等多模态 LLM 一块儿识别公式,转换成 LaTeX 格式
    sunnysab
        30
    sunnysab  
       1 天前
    @moskize #21 好的。我的意思是,文中是个分数,但实际被识别为纯文本了,并且位置有点小问题。 希望后面改进!关注!
    hinate
        31
    hinate  
       1 天前 via Android
    太强了👍🏻
    cooper
        32
    cooper  
       1 天前
    这个好,已 star !
    manning
        33
    manning  
       1 天前
    mathpix 上付费的 PDF 转 markdown ,这个能代替吗
    3085570450tt
        34
    3085570450tt  
       1 天前
    跟 PyMuPDF 比起来怎么样呢?同时 PyMuPDF 也有 LLM 的支持 https://pymupdf.readthedocs.io/en/latest/pymupdf4llm/
    moskize
        35
    moskize  
       1 天前
    @3085570450tt 看介绍它们好像是为 LLM 提取文本,而不是用 LLM 处理文本。而且 PyMuPDF 我记得是不提供 OCR 的。
    moskize
        36
    moskize  
       1 天前
    @sunnysab 这种想想都难识别😂 我看看公式识别相关 AI 能不能抓到这种,不过估计够呛
    Yien
        37
    Yien  
       1 天前 via Android
    厉害(òωó)👍
    luyg
        38
    luyg  
       1 天前
    厉害,我要试试
    akira
        39
    akira  
       1 天前
    先给个 star 后面有空了 试一下
    oyjt
        40
    oyjt  
       1 天前
    大佬,厉害呀。先 star 了为敬
    yueyueniao89
        41
    yueyueniao89  
       1 天前
    先马克,pdf 转 epub
    x4gz
        42
    x4gz  
       21 小时 11 分钟前
    这个带多线程吗 不然有的几百页的书转起来也太慢了
    moskize
        43
    moskize  
       4 小时 29 分钟前
    @x4gz 下一步考虑做多线程
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2511 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 05:18 · PVG 13:18 · LAX 22:18 · JFK 01:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.