别再为文本提取抓狂!一站式文本提取神器Kreuzberg 助你解决PDF、图片、文档等多格式文件的文本提取难题

news/2025/2/21 5:51:57/文章来源:https://www.cnblogs.com/longronglang/p/18728149

大家好,我是六哥,相信很多朋友肯定都有过从各种文档里提取文本的经历,那过程可太让人头疼了!今天就给大家分享一款超实用的现代Python库——Kreuzberg,帮你轻松解决文本提取的难题。

一、Kreuzberg解决了什么问题

现在很多文本提取工具,要么依赖外部API调用,要么配置特别复杂,使用起来很不方便。而Kreuzberg专为解决RAG(检索增强生成)应用里的文本提取需求而生,不过它可不止这点用处,任何文本提取场景都能完美适配。它专注于本地处理,依赖少,简单又高效。

二、Kreuzberg的强大功能

  1. 通用文本提取:不管是可搜索的PDF、扫描版PDF,还是图片、办公文档,Kreuzberg都能从中精准提取文本。比如你要从合同PDF里提取关键条款,或者从产品宣传图里抓取文字信息,它都能轻松搞定。
  2. 智能处理:扫描文档能自动OCR识别,文本文件能检测编码。像处理不同来源的文本资料,它能自动识别编码,让乱码问题不再出现。
  3. 现代Python设计:采用异步优先的API,基于anyio构建,支持全面的类型提示,方便在IDE中开发,还具备详细的错误处理,包含上下文信息,开发过程更省心。

三、Kreuzberg的显著特点

  1. 简单便捷:提供简洁的API,不用复杂配置就能运行,哪怕是新手小白也能轻松上手。
  2. 本地处理:无需调用外部API,不依赖云服务,数据安全有保障,没网也能正常工作。
  3. 资源高效:轻量级处理,不依赖GPU,普通电脑也能流畅运行,节省硬件成本。
  4. 格式支持全面:支持的格式超丰富,涵盖文档、图像、文本等各类格式,基本能满足日常所有需求。

四、使用方法超简单

  1. 安装
    • 安装Python包:pip install kreuzberg
    • 安装系统依赖项:需要Pandoc(用于文档格式转换)和Tesseract OCR(用于图像和PDF光学字符识别),按照各自的安装指南安装就行。
  2. 基本使用
    Kreuzberg提供了简单的异步文本提取API,主要有两个功能:
    • extract_file():从文件中提取文本,可以接受字符串路径或pathlib.Path 。
from pathlib import Path
from kreuzberg import extract_file, extract_bytes# 基本文件提取
async def extract_document():# 从PDF文件提取pdf_result = await extract_file("document.pdf")print(f"PDF文本: {pdf_result.content}")# 从图像提取img_result = await extract_file("scan.png")print(f"图像文本: {img_result.content}")# 从Word文档提取docx_result = await extract_file(Path("document.docx"))print(f"Word文本: {docx_result.content}")
- `extract_bytes()`:从字节中提取文本,接受字节字符串。比如处理上传的文件:
from kreuzberg import extract_bytesasync def process_upload(file_content: bytes, mime_type: str):"""处理已知MIME类型的上传文件内容。"""result = await extract_bytes(file_content, mime_type=mime_type)return result.content# 不同文件类型的示例用法
async def handle_uploads():# 处理PDF上传pdf_result = await extract_bytes(pdf_bytes, mime_type="application/pdf")# 处理图像上传img_result = await extract_bytes(image_bytes, mime_type="image/jpeg")# 处理Word文档上传docx_result = await extract_bytes(docx_bytes,mime_type="application/vnd.openxmlformats-officedocument.wordprocessingml.document")
  1. 高级功能
    • PDF处理选项:可以强制对包含嵌入图像或扫描内容的PDF进行OCR处理。
from kreuzberg import extract_fileasync def process_pdf():# 对包含图像或扫描内容的PDF强制OCRresult = await extract_file("document.pdf", force_ocr=True)# 处理扫描版PDF(自动使用OCR)scanned = await extract_file("scanned.pdf")
- **提取结果对象**:所有提取函数返回的对象包含提取的文本(`content`)和输出格式(`mime_type`)。
from kreuzberg import ExtractionResultasync def process_document(path: str) -> tuple[str, str]:# 作为具名元组访问result: ExtractionResult = await extract_file(path)print(f"内容: {result.content}")print(f"格式: {result.mime_type}")# 或解包为元组content, mime_type = await extract_file(path)return content, mime_type
- **错误处理**:Kreuzberg通过多种异常类型提供全面的错误处理,所有异常都继承自`KreuzbergError` ,每个异常都包含有助于调试的上下文信息。
from kreuzberg import extract_file
from kreuzberg.exceptions import (ValidationError,ParsingError,OCRError,MissingDependencyError
)async def safe_extract(path: str) -> str:try:result = await extract_file(path)return result.contentexcept ValidationError as e:# 输入验证问题# - 不支持或无法检测的MIME类型# - 文件缺失# - 无效输入参数print(f"验证失败: {e}")except OCRError as e:# OCR特定问题# - Tesseract处理失败# - 图像转换问题print(f"OCR失败: {e}")except MissingDependencyError as e:# 系统依赖问题# - 缺少Tesseract OCR# - 缺少Pandoc# - 版本不兼容print(f"依赖缺失: {e}")except ParsingError as e:# 一般处理错误# - PDF解析失败# - 格式转换问题# - 编码问题print(f"处理失败: {e}")return ""# 示例错误上下文
try:result = await extract_file("document.xyz")
except ValidationError as e:# 错误将包含上下文:# ValidationError: 不支持的mime类型# 上下文: {#    "file_path": "document.xyz",#    "supported_mimetypes": ["application/pdf",...]# }print(e)try:result = await extract_file("scan.jpg")
except OCRError as e:# 错误将包含上下文:# OCRError: OCR返回非0代码失败# 上下文: {#    "file_path": "scan.jpg",#    "tesseract_version": "5.3.0"# }print(e)

五、支持格式超丰富

  1. 文档格式:PDF(可搜索和扫描的文档)、Microsoft Word(.docx ,.doc )、PowerPoint 演示文稿(.pptx )、OpenDocument 文本(.odt )、富文本格式(.rtf )、EPUB (.epub)、DocBook XML(.dbk ,.xml )、FictionBook (.fb2)、LaTeX (.tex,.latex)、Typst (.typ)。
  2. 标记和文本格式:HTML(.html ,.htm )、纯文本(.txt )和Markdown(.md ,.markdown )、reStructuredText (.rst) 、Org-mode (.org)、DokuWiki (.txt) 、Pod (.pod)、手册页(.1 ,.2 等)。
  3. 数据和研究成果格式:Excel 电子表格(.xlsx )、CSV(.csv )和TSV(.tsv )文件、Jupyter Notebooks (.ipynb)、BibTeX(.bib )和BibLaTeX(.bib )、CSL-JSON (.json) 、EndNote XML (.xml)、RIS (.ris)、JATS XML(.xml )。
  4. 图片格式:JPEG (.jpg,.jpeg,.pjpeg)、PNG (.png) 、TIFF (.tiff,.tif)、BMP (.bmp) 、GIF (.gif) 、WebP(.webp )、JPEG 2000(.jp2 ,.jpx ,.jpm ,.mj2 )、便携式Anymap(.pnm )、便携式位图(.pbm )、便携式灰度图(.pgm )、便携式像素图(.ppm )。

六、架构设计很巧妙

Kreuzberg设计为在现有开源工具之上的高级异步抽象,集成了多个工具来实现强大功能:

  1. PDF处理:使用pdfium2处理可搜索的PDF文件,Tesseract OCR处理扫描内容。
  2. 文档转换:利用Pandoc支持多种文档和标记格式,python-pptx处理PowerPoint文件,html-to-markdown处理HTML内容,还有专门处理Excel电子表格的工具。
  3. 文本处理:实现智能编码检测,以及Markdown和纯文本处理。

如果你对Kreuzberg感兴趣,想深入了解或者参与开发,可以访问项目链接:https://github.com/Goldziher/kreuzberg 。

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

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

相关文章

《四步创业法》读书笔记 1

书籍简介 《四步创业法》的作者 Steven Gary Blank 博士是硅谷资深企业家,他一共创办了八家企业,并担任多家硅谷公司的董事和创业顾问。 《四步创业法》是创业领域的经典著作,提出了颠覆传统产品开发模式的客户发展方法论(Customer Development),为后来的精益创业(Lean …

2025.02.21 Lombok使用的问题记录

问题:运行SpringBoot项目后,报错,java: 找不到符号 符号 原因:似乎是在IDEA中手动选择了maven路径下面的lombok的jar包,导致版本不正确???将选项设置为根据项目类路径,而后在pom.xml中配置合适的版本后,即运行正常

在云服务器上开MC-Forge服

记录一下在云服务器上开mc-1.16.5-Forge服。 OS: Ubuntu 22.04.2 LTS x86_64 CPU: Intel Xeon Platinum (2) @ 2.500GHz Memory: 396MiB / 7279MiB在云服务器上开MC-Forge服 记录一下在云服务器上开mc-1.16.5-Forge服。 OS: Ubuntu 22.04.2 LTS x86_64 CPU: Intel Xeon Platinu…

Edge与Firefox浏览器在Win11虚拟桌面下Bug记录

背景Win11专业版,23H2,版本号22631.4890 Google浏览器,版本 133.0.6943.127 Edge浏览器,版本133.0.3065.69 Firefox浏览器,版本135.0.1Bug描述 在打开浏览器的启动时打开先前的窗口和标签页选项,且同时有多个虚拟桌面的情况下,在当前桌面打开的浏览器会跳到其他的桌面打…

Condition类的signal()方法底层原理

一、Condition类的signal()方法底层原理 Condition 接口的 signal 方法是用于唤醒一个在 Condition 上等待的线程。与 Object 的 notify 方法类似,signal 方法会从 Condition 的等待队列中选择一个线程并将其唤醒,使其重新尝试获取锁并继续执行 1、signal 方法的核心逻辑 sig…

【ssh隧道】利用ssh隧道将公网meterpreter弹至本地的msf中

不少人私信说如果攻击者的网络和被攻击者的网络都是位于不同地理位置的私网,这种情况下如何反弹shell,今天统一给大家介绍一款最间简单的方式。 利用自己公网VPS的SSH把meterpreter直接弹到本地的msf中 一、环境介绍 ubuntu16-LAMP:假设为入侵者公网的一台linux[vps]机器,公…

洛谷文章存档

由于洛谷专栏没了,故放博客园存档。 CSP-J/S 2024 游记 前言 2024.9.29 ~ 现在: \(\footnotesize\mathbf{安全声明:洛谷的文章只显示 {\underline{\color{red}{发布时期}}}而不显示{\underline{\color{red}{更新时期}}}!} \\ \footnotesize\mathbf{题目和答案均为{\underli…

一文了解:新基建是什么

新基建(新型基础设施建设)是中国提出的战略性发展方向,主要聚焦于数字化、智能化、绿色化等领域,旨在推动经济转型升级和高质量发展。 一、信息基础设施 以5G、人工智能、大数据等技术为核心,构建数字时代的“技术底座”:通信网络基础设施5G网络:高速率、低时延的通信网…

三大平台云数据库生态服务对决

title: 三大平台云数据库生态服务对决 date: 2025/2/21 updated: 2025/2/21 author: cmdragon excerpt: 包含自动分片算法实现、跨云迁移工具链开发、智能索引推荐系统构建等核心内容,提供成本优化计算模型、灾备演练方案设计、性能调优路线图等完整解决方案。 categories:前…

【EDR】一种对抗企业级EDR深度行为分析的双模式混淆技术

所谓双模式混淆技术,指的是利用脚本+PE格式进行混合混淆技术,该技术可以导致沙箱执行程序失败, 而且也能够加大分析难度,甚至手动执行都无法成功。 该样本原始文件名为:"Xclient.exe"和"XingCode Unblocker2025.exe", 奇怪的是, 被工具标识为是一个数据文件…

【SSH漏洞】SSH公私钥认证原理及相关漏洞

免责声明: 本文仅供安全研究与讨论之用,严禁用于非法用途,违者后果自负。前言 随着信息安全意识的提升,SSH(Secure Shell)作为一种安全的远程登录协议,被广泛应用于服务器管理、数据传输等领域。SSH的核心机制之一是公私钥认证,它相比密码认证更安全,能有效抵御暴力破…

亿级流量下通用的高并发架构设计

关键词:读/写分离、数据缓存、缓存更新、CQRS、数据分片、异步写前言 既然是亿级用户应用,那么高并发必然是其架构设计的核心要素。 本文我们将介绍高并发架构设计的一些通用设计方案。 一、高并发架构设计的要点 高并发意味着系统要应对海量请求。从笔者多年的面试经验来看,…