1.6K star!这个开源文本提取神器,5分钟搞定PDF/图片/Office文档!

嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法

Kreuzberg 是一个基于 Python 的文本提取库,支持从 PDF、图像、Office 文档等 20+ 格式中提取文本内容。采用 MIT 开源协议,具备本地处理、异步架构、智能 OCR 等特性,特别适合需要隐私保护的文档处理场景。

一、核心功能亮点

🔍 多格式通吃
支持 PDF(含扫描件)、JPEG/PNG 图片、Word/Excel/PowerPoint、Markdown、EPUB 等常见文档格式

🤖 智能PDF处理
自动识别可搜索PDF与扫描件,智能切换文本提取与OCR模式,内置文本校验防错机制

⚡ 异步高性能
基于 Python async/await 实现,支持批量文件并发处理,充分利用多核CPU性能

📦 轻量级设计
安装包仅 5MB+,无需 GPU 支持,在树莓派等低配设备上也能流畅运行

🌐 多语言OCR
集成 Tesseract 5 引擎,支持中/英/德/法/日等 100+ 语言识别,可配置多语言混合识别

二、技术架构解析

模块 技术选型 功能说明
文档转换 Pandoc 2+ 处理 Office/EPUB/Markdown 等格式
PDF处理 pdfium2 + Tesseract 5 双引擎智能切换处理PDF
异步框架 Python 3.10+ 原生 async/await 支持
图像处理 Pillow 图片预处理与格式转换
依赖管理 UV 快速安装与轻量化依赖管理

三、五大应用场景实战

场景1:企业文档智能解析

from kreuzberg import batch_extract_file_sync# 批量处理合同文档
results = batch_extract_file_sync([
    "采购合同.pdf",
    "报价单.xlsx",
    "签字扫描件.jpg"
])for path, (content, _, _) in results.items():
    print(f"【{path}】解析结果:\n{content[:200]}...\n")

场景2:学术论文内容提取

async def extract_research_paper():
    result = await extract_file(
        "论文.pdf",
        language="chi_sim+eng",  # 中英混合识别
        psm=PSMMode.SINGLE_COLUMN  # 适合学术论文版式
    )
    print(f"摘要章节:{result.content.split('摘要')[1][:500]}...")

场景3:法律文书归档系统

def process_legal_docs(docs):
    for doc, mime_type in docs:
        result = await extract_bytes(
            doc,
            mime_type=mime_type,
            force_ocr=True  # 确保扫描件100%识别
        )
        save_to_database(
            content=result.content,
            metadata=result.metadata
        )

场景4:RAG知识库构建

async def build_knowledge_base(files):
    results = await batch_extract_file(files)
    for content, _, meta in results:
        await vector_db.insert({
            "text": content,
            "source": meta.get("title"),
            "author": meta.get("creator")
        })

场景5:跨格式内容搜索

def search_across_formats(keyword):
    results = []
    for file in os.listdir("docs"):
        content, _, _ = extract_file_sync(file)
        if keyword in content:
            results.append(file)
    return results

四、同类项目对比

项目名称 支持格式 OCR能力 异步支持 安装大小 学习曲线
Kreuzberg ★★★★★ ★★★★☆ 5MB 简单
PyPDF2 PDF 1MB 简单
python-docx DOCX 2MB 中等
pytesseract 图片 ★★★★☆ 100MB+ 复杂
pdfplumber PDF 3MB 中等

核心优势对比

  1. 格式通吃:同时处理文档/图片/PDF,无需多个库切换
  2. 智能处理:自动识别文档类型选择最佳解析方式
  3. 生产就绪:完善的错误处理与元数据支持
  4. 隐私安全:全程本地处理不依赖云服务

五、实战技巧分享

技巧1:提升OCR识别精度

# 配置德语+英语识别,使用单列版面分析
await extract_file(
    "german_doc.jpg",
    language="deu+eng",
    psm=PSMMode.SINGLE_COLUMN,
    ocr_config={"tessedit_pageseg_mode": 6}
)

技巧2:处理加密PDF

from kruetzberg import extract_file, ParsingErrortry:
    result = await extract_file(
        "encrypted.pdf",
        pdf_options={"password": "123456"}
    )
except ParsingError as e:
    print("密码错误或文件损坏!")

技巧3:保留文档格式

# 提取带Markdown格式的内容
result = await extract_file(
    "report.docx",
    pandoc_options={"output_format": "markdown"}
)
print(result.content)  # 输出带Markdown标记的文本

六、项目部署方案

个人使用方案

# 1. 安装库
pip install kreuzberg# 2. 安装依赖(Ubuntu示例)
sudo apt-get install pandoc tesseract-ocr tesseract-ocr-chi-sim# 3. 中文识别测试
echo "测试文本" > test.txt
python -c "from kruetzberg import extract_file_sync; print(extract_file_sync('test.txt').content)"

Docker生产部署

FROM python:3.10-slimRUN apt-get update && \
    apt-get install -y pandoc tesseract-ocr tesseract-ocr-chi-sim && \
    rm -rf /var/lib/apt/lists/*COPY requirements.txt .
RUN pip install -r requirements.txtCMD ["python", "app.py"]

七、生态整合推荐

  • 知识库系统:与 LangChain 结合构建智能文档处理流水线
  • 网盘系统:集成到 Nextcloud 实现自动文档内容索引
  • OA系统:对接钉钉/企业微信实现移动端文档解析
  • RAG应用:与 DeepSeek-R1 等大模型结合实现智能问答

八、总结展望

Kreuzberg 作为新一代文档处理工具,在以下场景具有独特优势:

  • 需要本地化部署的隐私敏感场景
  • 混合格式文档处理需求
  • 高并发文档处理任务
  • 资源受限的边缘计算环境

随着 2025 年多模态AI的爆发式增长,此类高效文本提取工具将成为智能办公的基础设施。

九、项目地址

https://github.com/Goldziher/kreuzberg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/904219.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode每日一题:判断一个括号字符串是否有效

题目 一个括号字符串是只由 ( 和 ) 组成的 非空 字符串。如果一个字符串满足下面 任意 一个条件,那么它就是有效的:字符串为 (). 它可以表示为 AB(A 与 B 连接),其中A 和 B 都是有效括号字符串。 它可以表示为 (A) ,其中 A 是一个有效括号字符串。给你一个括号字符串 s 和…

实验2c语言分支与循环基础应用编程

任务一:1 #include <stdio.h>2 #include <stdlib.h>3 #include <time.h>4 5 #define N 56 7 int main() {8 int number;9 int i; 10 11 srand(time(0)); // 以当前系统时间作为随机种子 12 for(i = 0; i < N; ++i) { 13 nu…

矿用人员违规闯入监控报警系统

矿用人员违规闯入监控报警系统,设置警戒预警功能,巷道正在行车时,当有行人闯入时,及时抓拍、识别现场违章入侵人员同时闪光警示和音箱报警提示禁止进入,在绞车运行期间人员误入斜巷能够及时报警,自动停止绞车运行。该系统做到绞车运行和行人的安全隔离,有力保障了煤矿斜…

工厂车间人员违规闯入禁区报警系统

工厂车间人员违规闯入禁区报警系统前端设备嵌入AI人体识别算法,对人员的检测、跟踪,实现对人体检测分析识别,实时预警周界区域内人员入侵事件。当有可疑人员进入监测范围内可对其自动识别,即对其抓拍并将当时图像传输到管理中心,在管理中心输出报警信号。工厂车间人员违规…

iis备份还原工具,想要备份iis有哪些工具可以实现?

想要备份IIS(Internet Information Services),可以使用多种专门的备份还原工具。以下是一些常用的IIS备份还原工具及其简要介绍:IISBackUp 功能:专注于备份和恢复IIS站点设置,包括网站配置文件、站点绑定信息、应用程序池设置、SSL证书和密钥信息等。 特点: 提供一种方便…

集合的通用遍历方法--java进阶day09

1.集合的三种通用遍历方法之前我们学习过集合的遍历方法,为什么这里还要再学呢? 这是因为,之前我们用的遍历方法使用了索引,但我们知道set接口的实现类的集合均无索引,所以我们要学习通用的遍历方法 2.迭代器遍历 1.迭代器 迭代器叫做Iterator,是一个接口,我们知道接口是…

安卓逆向:adb连接模拟器进行jeb动态调试

这篇文章的内容记录下我在各个文章搜索学习最后解决了安卓进行模拟器动态调试的方法。 参考的文章有: ADB:https://blog.csdn.net/Python_0011/article/details/132040387 ADB的使用https://blog.csdn.net/SM1555/article/details/112608576 Androidkiller:https://blog.csdn.…

Java中的Map CAS AQS

Java中的Map 1.基本介绍和api使用就免了 Java中的Map是一种用于存储键值对(Key-Value)的接口,属于java.util包,是集合框架的重要组成部分。 2.HashMap从图中的关系可以看出这些类间关系了。 ①基本分析 HashMap的一些属性 // 默认容量 16 static final int DEFAULT_INITIAL…

一款 .NET 开源、功能强大的远程连接管理工具,支持 RDP、VNC、SSH 等多种主流协议!

前言 今天大姚给大家分享一款基于 .NET 开源(GPL-2.0 license)、免费、功能强大的 Windows 远程连接管理工具,支持 RDP、VNC、SSH 等多种主流协议:mRemoteNG。 项目介绍 mRemoteNG是一款基于 .NET 开源(GPL-2.0 license)、免费、功能强大的 Windows 远程连接管理工具,支…

探秘Transformer系列之(17)--- RoPE

从零开始解析Transformer,目标是:(1) 解析Transformer如何运作,以及为何如此运作,让新同学可以入门;(2) 力争融入一些比较新的或者有特色的论文或者理念,让老鸟也可以有所收获。探秘Transformer系列之(17)--- RoPE 目录探秘Transformer系列之(17)--- RoPE文章总表0x0…

《AI未来进行式》(DeepSeek、宇树科技、人形机器人、AI面试官本书全部预言。第18届文津提名奖,樊登、俞敏洪、刘慈欣等推荐) | PDF免费下载

《AI未来进行式》深入探讨人工智能的最新进展与未来趋势,涵盖 DeepSeek、宇树科技、人形机器人、AI 面试官等前沿话题。通过翔实案例与专业分析,预测 AI 如何重塑社会、产业与人类生活。荣获第18届文津图书奖提名,获樊登、俞敏洪、刘慈欣等推荐,适合对 AI 未来充满好奇的读…

python第三章课后程序练习题

重量计算 earth_weight = eval(input("请输入你当前的体重(kg)😊) moon_weight = earth_weight * 0.165 for year in range(1, 11): earth_weight += 0.5 moon_weight = earth_weight * 0.165 print(f"Year {year}: Earth weight = {earth_weight}kg, Moon weight …