别再为文本提取抓狂!一站式文本提取神器Kreuzberg 助你解决PDF、图片、文档等多格式文件的文本提取难题
大家好,我是六哥,相信很多朋友肯定都有过从各种文档里提取文本的经历,那过程可太让人头疼了!今天就给大家分享一款超实用的现代Python库——Kreuzberg,帮你轻松解决文本提取的难题。
一、Kreuzberg解决了什么问题
现在很多文本提取工具,要么依赖外部API调用,要么配置特别复杂,使用起来很不方便。而Kreuzberg专为解决RAG(检索增强生成)应用里的文本提取需求而生,不过它可不止这点用处,任何文本提取场景都能完美适配。它专注于本地处理,依赖少,简单又高效。
二、Kreuzberg的强大功能
- 通用文本提取:不管是可搜索的PDF、扫描版PDF,还是图片、办公文档,Kreuzberg都能从中精准提取文本。比如你要从合同PDF里提取关键条款,或者从产品宣传图里抓取文字信息,它都能轻松搞定。
- 智能处理:扫描文档能自动OCR识别,文本文件能检测编码。像处理不同来源的文本资料,它能自动识别编码,让乱码问题不再出现。
- 现代Python设计:采用异步优先的API,基于anyio构建,支持全面的类型提示,方便在IDE中开发,还具备详细的错误处理,包含上下文信息,开发过程更省心。
三、Kreuzberg的显著特点
- 简单便捷:提供简洁的API,不用复杂配置就能运行,哪怕是新手小白也能轻松上手。
- 本地处理:无需调用外部API,不依赖云服务,数据安全有保障,没网也能正常工作。
- 资源高效:轻量级处理,不依赖GPU,普通电脑也能流畅运行,节省硬件成本。
- 格式支持全面:支持的格式超丰富,涵盖文档、图像、文本等各类格式,基本能满足日常所有需求。
四、使用方法超简单
- 安装
- 安装Python包:
pip install kreuzberg - 安装系统依赖项:需要Pandoc(用于文档格式转换)和Tesseract OCR(用于图像和PDF光学字符识别),按照各自的安装指南安装就行。
- 安装Python包:
- 基本使用
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_bytes
async 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")
- 高级功能
- PDF处理选项:可以强制对包含嵌入图像或扫描内容的PDF进行OCR处理。
from kreuzberg import extract_file
async def process_pdf():
# 对包含图像或扫描内容的PDF强制OCR
result = await extract_file("document.pdf", force_ocr=True)
# 处理扫描版PDF(自动使用OCR)
scanned = await extract_file("scanned.pdf")
- **提取结果对象**:所有提取函数返回的对象包含提取的文本(`content`)和输出格式(`mime_type`)。
from kreuzberg import ExtractionResult
async 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.content
except 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)
五、支持格式超丰富
- 文档格式:PDF(可搜索和扫描的文档)、Microsoft Word(.docx ,.doc )、PowerPoint 演示文稿(.pptx )、OpenDocument 文本(.odt )、富文本格式(.rtf )、EPUB (.epub)、DocBook XML(.dbk ,.xml )、FictionBook (.fb2)、LaTeX (.tex,.latex)、Typst (.typ)。
- 标记和文本格式:HTML(.html ,.htm )、纯文本(.txt )和Markdown(.md ,.markdown )、reStructuredText (.rst) 、Org-mode (.org)、DokuWiki (.txt) 、Pod (.pod)、手册页(.1 ,.2 等)。
- 数据和研究成果格式:Excel 电子表格(.xlsx )、CSV(.csv )和TSV(.tsv )文件、Jupyter Notebooks (.ipynb)、BibTeX(.bib )和BibLaTeX(.bib )、CSL-JSON (.json) 、EndNote XML (.xml)、RIS (.ris)、JATS XML(.xml )。
- 图片格式: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设计为在现有开源工具之上的高级异步抽象,集成了多个工具来实现强大功能:
- PDF处理:使用pdfium2处理可搜索的PDF文件,Tesseract OCR处理扫描内容。
- 文档转换:利用Pandoc支持多种文档和标记格式,python-pptx处理PowerPoint文件,html-to-markdown处理HTML内容,还有专门处理Excel电子表格的工具。
- 文本处理:实现智能编码检测,以及Markdown和纯文本处理。
如果你对Kreuzberg感兴趣,想深入了解或者参与开发,可以访问项目链接:https://github.com/Goldziher/kreuzberg 。
别再为文本提取抓狂!一站式文本提取神器Kreuzberg 助你解决PDF、图片、文档等多格式文件的文本提取难题的更多相关文章
- Java 在 Word 文档中使用新文本替换指定文本
创作一份文案,经常会高频率地使用某些词汇,如地名.人名.人物职位等,若表述有误,就需要整体撤换.文本将介绍如何使用Spire.Doc for Java,在Java程序中对Word文档中的指定文本进行替 ...
- Flashtext 使用文档 大规模数据清洗的利器-实现文本结构化
1.1 安装 pip install flashtext 1.2 使用例子 1.2.1 关键字提取 >>> from flashtext import KeywordProcesso ...
- document.write 向文档中写内容,包括文本、脚本、元素之类的,但是它在什么时候执行不会覆盖当前页面内容尼?
当你打开一个页面,浏览器会 调用 document.open() 打开文档 document.write(...) 将下载到的网页内容写入文档 所有内容写完了,就调用 document.close() ...
- 使用swagger作为restful api的doc文档生成——从源码中去提取restful URL接口描述文档
初衷 记得以前写接口,写完后会整理一份API接口文档,而文档的格式如果没有具体要求的话,最终展示的文档则完全决定于开发者的心情.也许多点,也许少点.甚至,接口总是需要适应新需求的,修改了,增加了,这份 ...
- pywin32 pywin32 docx文档转html页面 word doc docx 提取文字 图片 html 结构
https://blog.csdn.net/X21214054/article/details/78873338# python docx文档转html页面 - 程序猿tx - 博客园 https:/ ...
- FlexPaper 2.2.1介绍与提取嵌入的文档
源起看到某个公司内网的公文使用FlexPaper组件来显示文档,在这儿是GoogleCode Project的主页, 还有现在的官方主页.目前FlexPaper是个开源项目,GPLv3 ...
- python、java、ruby、node等如何提取office文档中的内容?
我相信大家都有过这样的需求,把doc.ppt.excel.pdf.txt中的文本内容提取出来.提取出来的文本内容可用于文档内容的全文索引,文档的基本内容摘要等.在度娘上搜索“如何提取文档内容”,确实有 ...
- C#word(2007)操作类--新建文档、添加页眉页脚、设置格式、添加文本和超链接、添加图片、表格处理、文档格式转化
转:http://www.cnblogs.com/lantionzy/archive/2009/10/23/1588511.html 1.新建Word文档 #region 新建Word文档/// &l ...
- 记录EXCEL格式和TXT文本格式之间的互转
EXCEL格式转变成TXT文本格式 1.打开execl文档,点击文件另存为 2.选择txt保存 3.重命名文档,打开该txt文档 4.按Ctrl+H,将文档中空格转换成其他分割符,单击确定 TXT格式 ...
- [翻译] DTCoreText 从HTML文档中创建富文本
DTCoreText 从HTML文档中创建富文本 https://github.com/Cocoanetics/DTCoreText 注意哦亲,DTRichTextEditor 这个组件是收费的,不贵 ...
随机推荐
- 基于CPLD/FPGA的呼吸灯效果实现(附全部verilog源码)
一.功能介绍 此设计可以让你的FPGA板子上那颗LED具有呼吸效果,像智能手机上的呼吸灯一样.以下源码已上板验证通过,大家可直接使用. 二.呼吸灯Verilog源码 ps1. 带★号处可根据需要进行修 ...
- 下列哪个选项是对 WebSocket 的正确描述?
A. 一种扩展 HTTP 的协议,通信消息以 XML 格式描述. B. 使用 http或https作为URI连接的前缀,并使用与HTTP和HTTPS相同的端口号进行通信. C. 它是一种双向通信 ...
- vue组件传参props
传参格式,将需要传的参数以属性方式写在组件标签上 //组件标签 <zu a='参数一' b='参数b'></zu> 接收格式,在组件内 //props属性接收参数 props: ...
- 【分块】LibreOJ 6281 数列分块入门5
前言 对一个 int 类型的非负整数进行开方下取整,最多只会开方四次大小就不会再发生变化.一个大于 \(0\) 的正整数开方下取整最后的结果比如是 \(1\),而 \(1\) 开方的结果仍然会是 \( ...
- 裸辞一年狂肝了一个AI搜索!我要硬刚Google和Perplexity!
Hika AI 是一款 AI 加持的「知识搜索工具」,它主要的目的是帮助你在搜索问题时通过Hika的「不同视角的思路」,为你快速延伸问题相关的知识领域,或者深挖问题中某个关键点,获得更加全面的结果. ...
- 【Amadeus原创】修改docker里面网站的port端口映射
切记:以下顺序千万不能颠倒!否则不生效! 1. 查看需要修改的容器,记住container id docker ps -a 2. 停止容器 docker stop xxx 3. 修改容器的端口映射配置 ...
- 一款基于 .NET MVC 框架开发、功能全面的MES系统
前言 今天大姚给大家分享一款基于 .NET MVC 框架开发.功能全面的离散型零部件制造管理系统(MES):EasyMES. 项目介绍 EasyMES一款基于 .NET 6 MVC 框架开发.开源免费 ...
- JS 面试题(2023-09-20更新)
因JS代码实现面试题较多,移至另外一篇文章:JS面试题-代码实现 基础 JavaScript 是什么? JavaScript 是一种属于网络的脚本语言,被广泛应用于 Web 应用开发 JavaScri ...
- Rapid SCADA v6安装常见问题
用了很多年的Rapid SCADA v5,现在官网已经推出了v6,就简单写一下有关v6的安装指南吧. 本指南面向Windows用户,不适用于linux用户 步骤 从官网下载Rapid SCADA最新的 ...
- Superpower:一个基于 C# 的文本解析工具开源项目
推荐一个文本解析开源工具:Superpower,方便我们解析文本,比如解析日志文件.构建自己的编程语言还是其他需要精确解析和错误报告的场景. 01 项目简介 Superpower 的核心功能是将字符序 ...