Kreuzberg:本地OCR+多格式解析!Kreuzberg如何用Python暴力提取30+文档格式?程序员看完直呼内行!

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

我们经常需要从各种不同类型的文档中提取文本内容,无论是办公文档、图像还是PDF文件。而Kreuzberg这个Python库的出现,为我们提供了一个极为便捷且高效的解决方案。

一、Kreuzberg简介

Kreuzberg是一个专注于从文档中提取文本的Python库。它具有很多令人心动的特性,使得它在文本提取领域脱颖而出。

(一)特色亮点

  1. 简单便捷(Simple and Hassle - Free)
    • 它拥有简洁的API,无需复杂的配置就能正常工作。这对于开发者来说是一个巨大的优势,不需要花费大量的时间在繁琐的设置上,就能够快速地将其集成到自己的项目中。

  2. 本地处理(Local Processing)
    • 不需要进行外部API调用,也没有云依赖。这意味着在使用Kreuzberg时,不用担心网络连接问题,也不会因为云服务的限制而受到影响。同时,数据的安全性也得到了保障,因为所有的处理都在本地进行。

  3. 资源高效(Resource Efficient)
    • 它是轻量级的处理方式,不需要GPU的支持。这使得它可以在各种不同配置的设备上运行,无论是普通的笔记本电脑还是服务器,都能够轻松应对文本提取任务。

  4. 包体小巧(Small Package Size)
    • 它的依赖项经过精心挑选,占用空间极小。这对于那些对空间要求比较严格的项目来说是非常友好的,不会因为引入一个库而导致项目的体积大幅增加。

  5. 格式支持广泛(Format Support)
    • 全面支持各种文档、图像和文本格式。无论是常见的PDF、Word文档,还是各种图像格式,甚至是一些特定的研究格式,Kreuzberg都能够进行文本提取。

  6. 现代Python风格(Modern Python)
    • 采用了async/await、类型提示以及函数式优先的方法构建。这使得代码更加简洁、高效,也符合现代Python编程的最佳实践。

  7. 开源友好(Permissive OSS)
    • Kreuzberg及其依赖项都采用了宽松的开源许可证,这鼓励了更多的开发者参与到项目的改进和扩展中来。

(二)应用场景

  1. RAG(Retrieval Augmented Generation)应用
    • Kreuzberg专为RAG应用而构建,在这些应用中,本地处理且依赖最少是非常重要的。例如在一些本地的知识检索和文本生成系统中,Kreuzberg可以快速准确地从各种文档中提取文本内容,为后续的知识检索和文本生成提供基础数据。

  2. 现代异步应用(Modern Async Applications)
    • 在现代的异步应用中,Kreuzberg的异步接口能够很好地与其他异步组件协同工作。比如在一个网络爬虫项目中,需要从下载的各种文档中提取文本内容,Kreuzberg的异步接口可以提高整个系统的效率,避免阻塞等待。

  3. 无服务器函数(Serverless Functions)
    • 在无服务器函数环境中,由于资源有限且对性能要求较高,Kreuzberg的轻量级和高效的特点就能够发挥作用。它可以在无服务器函数中快速地处理文档文本提取任务,而不会占用过多的资源。

  4. 容器化应用(Dockerized Applications)
    • 对于容器化的应用,Kreuzberg的本地处理和小体积的特点非常适合。在一个容器化的文档处理系统中,可以方便地将Kreuzberg集成进去,对容器内的各种文档进行文本提取操作。

二、Kreuzberg的安装

  1. 安装Python包
    • 首先,使用pip install kreuzberg命令就可以轻松安装Kreuzberg这个Python包。

  2. 安装系统依赖项
    • Kreuzberg需要两个系统级别的依赖项:
      • Pandoc:用于文档格式转换,最低要求的版本是Pandoc 2。
        • 在Linux(Ubuntu)系统下,可以使用sudo apt - get install pandoc tesseract - ocr命令来安装。

        • 在MacOS系统下,可以使用brew install tesseract pandoc命令来安装。

        • 在Windows系统下,可以使用choco install - y tesseract pandoc命令来安装。

      • Tesseract OCR:用于图像和PDF的OCR(光学字符识别),最低要求的版本是Tesseract 4。
        • 需要注意的是,在大多数发行版中,tesseract - ocr包可能会被拆分成多个包,除了英语之外,如果需要其他语言模型,可能需要单独安装。同时,建议查阅这些库的官方文档,以获取针对自己平台的最新安装说明。

三、Kreuzberg的架构

  1. PDF处理(PDF Processing)
    • 对于PDF文件,Kreuzberg采用了不同的策略。对于可搜索的PDF,它使用pdfium2进行文本提取;对于扫描内容,则使用Tesseract OCR。这样的组合方式能够有效地处理各种类型的PDF文件,无论是原生的可搜索PDF还是扫描得到的图像型PDF。

  2. 文档转换(Document Conversion)
    • Pandoc:用于处理多种文档和标记格式。

    • python - pptx:专门用于处理PowerPoint文件。

    • html - to - markdown:用于处理HTML内容。

    • calamine:用于处理Excel电子表格(支持多工作表)。

  3. 文本处理(Text Processing)
    • 它具备智能编码检测功能,能够很好地处理Markdown和纯文本。

四、支持的格式

  1. 文档格式(Document Formats)
    • PDF(.pdf,包括可搜索和扫描类型):这是最常见的文档格式之一,无论是可直接提取文本的PDF还是需要OCR识别的扫描版PDF,Kreuzberg都能处理。

    • Microsoft Word(.docx):在办公场景中广泛使用的Word文档,Kreuzberg可以从中提取出文本内容。

    • PowerPoint演示文稿(.pptx):对于PPT文件,Kreuzberg能够提取其中的文本信息,这对于需要对PPT内容进行分析或者转换的场景非常有用。

    • OpenDocument Text(.odt):一种开源的文档格式,Kreuzberg同样支持对其进行文本提取。

    • Rich Text Format(.rtf):这种格式在一些早期的文档编辑中比较常见,Kreuzberg也可以对其进行处理。

    • EPUB(.epub):电子图书的常见格式,Kreuzberg能够从EPUB文件中提取出文本内容,方便对电子书内容进行分析或者转换。

    • DocBook XML(.dbk,.xml):在文档编写和发布领域中使用的一种XML格式,Kreuzberg支持对其进行文本提取。

    • FictionBook(.fb2):主要用于电子小说的格式,Kreuzberg可以从这种格式的文件中提取文本。

    • LaTeX(.tex,.latex):在学术和科研领域广泛使用的排版系统,Kreuzberg能够从LaTeX文件中提取出文本内容。

    • Typst(.typ):一种新兴的标记语言,Kreuzberg也对其进行了支持。

  2. 标记和文本格式(Markup and Text Formats)
    • HTML(.html,.htm):网页的基本格式,Kreuzberg可以从HTML文件中提取出其中的文本内容,这对于网页内容的分析和处理非常有用。

    • 纯文本(.txt)和Markdown(.md,.markdown):这是最基本的文本格式,Kreuzberg能够很好地处理它们,无论是简单的纯文本文件还是带有标记的Markdown文件。

    • reStructuredText(.rst):一种轻量级的标记语言,Kreuzberg支持对其进行文本提取。

    • Org - mode(.org):在Emacs等编辑器中广泛使用的一种模式,Kreuzberg可以从这种模式的文件中提取文本。

    • DokuWiki(.txt):一种用于维基的文本格式,Kreuzberg能够从其中提取文本。

    • Pod(.pod):一种文档格式,Kreuzberg支持对其进行文本提取。

    • Troff/Man(.1,.2等):在Unix系统中用于编写手册页的格式,Kreuzberg可以从这种格式的文件中提取文本。

  3. 数据和研究格式(Data and Research Formats)
    • 电子表格(.xlsx,.xls,.xlsm,.xlsb,.xlam,.xla,.ods):无论是微软的Excel格式还是开源的ODS格式,Kreuzberg都能够从其中提取出文本内容,这对于数据分析和处理非常有用。

    • CSV(.csv)和TSV(.tsv)文件:这是常见的数据存储格式,Kreuzberg可以从这些文件中提取出文本内容。

    • OPML文件(.opml):一种用于大纲的格式,Kreuzberg支持对其进行文本提取。

    • Jupyter Notebooks(.ipynb):在数据科学和机器学习领域广泛使用的笔记本格式,Kreuzberg能够从Jupyter笔记本中提取出文本内容。

    • BibTeX(.bib)和BibLaTeX(.bib):在学术文献管理中使用的格式,Kreuzberg可以从这些格式的文件中提取出文本内容。

    • CSL - JSON(.json):一种用于文献引用样式的JSON格式,Kreuzberg支持对其进行文本提取。

    • EndNote和JATS XML(.xml):在文献管理和学术出版领域使用的XML格式,Kreuzberg支持对其进行文本提取。

    • RIS(.ris):一种用于文献引用的格式,Kreuzberg可以从这种格式的文件中提取出文本内容。

  4. 图像格式(Image Formats)
    • JPEG(.jpg,.jpeg,.pjpeg):最常见的图像格式之一,Kreuzberg可以对JPEG图像进行OCR识别并提取出文本内容。

    • PNG(.png):另一种常见的图像格式,Kreuzberg同样可以对其进行处理。

    • TIFF(.tiff,.tif):在一些专业领域如印刷和摄影中使用的图像格式,Kreuzberg能够对TIFF图像进行OCR识别。

    • BMP(.bmp):一种简单的图像格式,Kreuzberg可以对BMP图像进行OCR识别。

    • GIF(.gif):动画图像格式,Kreuzberg能够对GIF图像进行OCR识别并提取文本内容。

    • JPEG 2000家族(.jp2,.jpm,.jpx,.mj2):JPEG的升级版格式,Kreuzberg也可以对其进行处理。

    • WebP(.webp):一种新兴的图像格式,Kreuzberg支持对其进行OCR识别。

    • 便携式anymap格式(.pbm,.pgm,.ppm,.pnm):这些不太常见的图像格式,Kreuzberg同样可以进行OCR识别并提取文本内容。

五、Kreuzberg的用法

  1. 单项目处理(Single Item Processing)
    • **extract_file()**:这是一个异步函数,用于从文件(可以接受字符串路径或者pathlib.Path类型)中提取文本。例如:

import asyncio
from pathlib import Path
from kreuzberg import extract_file, ExtractionResult, PSMModeasync def extract_document():# 从PDF文件中以默认设置提取pdf_result: ExtractionResult = await extract_file("document.pdf")print(f"Content: {pdf_result.content}")asyncio.run(extract_document())
  • **extract_bytes()**:异步函数,用于从字节(接受字节字符串)中提取文本。例如:

from kreuzberg import extract_bytes, ExtractionResultasync def process_upload(file_content: bytes, mime_type: str) -> ExtractionResult:return await extract_bytes(file_content,mime_type=mime_type,)# 示例用法,不同文件类型
async def handle_uploads(docx_bytes: bytes, pdf_bytes: bytes, image_bytes: bytes):# 处理PDF上传pdf_result = await process_upload(pdf_bytes, mime_type="application/pdf")print(f"PDF content: {pdf_result.content}")print(f"PDF metadata: {pdf_result.metadata}")# 处理图像上传(将使用OCR)img_result = await process_upload(image_bytes, mime_type="image/jpeg")print(f"Image text: {img_result.content}")# 处理Word文档上传docx_result = await process_upload(docx_bytes,mime_type="application/vnd.openxmlformats - officedocument.wordprocessingml.document")print(f"Word content: {docx_result.content}")asyncio.run(handle_uploads(b"", b"", b""))
  • **extract_file_sync()**:是extract_file()的同步版本。

  • **extract_bytes_sync()**:是extract_bytes()的同步版本。

  1. 批处理(Batch Processing)
    • **batch_extract_file()**:异步函数,用于同时从多个文件中提取文本。例如:

from pathlib import Path
from kreuzberg import batch_extract_file, batch_extract_bytes, batch_extract_file_syncasync def process_documents(file_paths: list[Path]) -> None:# 从多个文件中提取results = await batch_extract_file(file_paths)for path, result in zip(file_paths, results):print(f"File {path}: {result.content[:100]}...")asyncio.run(process_documents([Path("file1"), Path("file2")]))
  • **batch_extract_bytes()**:异步函数,用于同时从多个字节内容中提取文本。例如:

from pathlib import Path
from kreuzberg import batch_extract_file, batch_extract_bytes, batch_extract_file_syncasync def process_uploads(contents: list[tuple[bytes, str]]) -> None:# 每个项目是(内容,MIME类型)的元组results = await batch_extract_bytes(contents)for (_, mime_type), result in zip(contents, results):print(f"Upload {mime_type}: {result.content[:100]}...")asyncio.run(process_uploads([(b"", "type1"), (b"", "type2")]))
  • **batch_extract_file_sync()**:是batch_extract_file()的同步版本。

  • **batch_extract_bytes_sync()**:是batch_extract_bytes()的同步版本。

六、配置参数

  1. OCR配置(OCR Configuration)
    • force_ocr(默认值为False):即使对于可搜索的PDF,也强制进行OCR处理。例如:

from kreuzberg import extract_fileasync def process_pdf():# 强制对可搜索的PDF进行OCRresult = await extract_file("document.pdf", force_ocr = True)print(result.content)asyncio.run(process_pdf())
  • language(默认值为eng):指定Tesseract OCR的语言模型。这会影响不同语言文档的文本识别准确性。例如,eng代表英语,deu代表德语,eng+deu代表英语和德语。需要注意的是,语言的顺序会影响处理时间,第一个语言是主要语言,第二个语言是次要语言等。

  • psm(Page Segmentation Mode,默认值为PSM.AUTO):控制Tesseract如何分析页面布局。在大多数情况下,不需要将其更改为其他值,但如果有特殊需求,可以根据Tesseract的文档进行调整。

  1. 处理配置(Processing Configuration)
    • max_processes(默认值为CPU数量):Tesseract的最大并发进程数。例如:

from kreuzberg import extract_fileasync def process_pdf():# 控制OCR并发数result = await extract_file("large_document.pdf",max_processes = 4)print(result.content)asyncio.run(process_pdf())

总结

Kreuzberg是一个功能强大的Python库,专为从各种文档中提取文本而设计,支持PDF、图像、办公文档等多种格式。它以简单便捷、本地处理、资源高效等特性脱颖而出,无需复杂配置即可快速集成到项目中。Kreuzberg适用于RAG应用、现代异步应用、无服务器函数和容器化应用等多种场景,为开发者提供了极大的便利。

项目地址

https://github.com/Goldziher/kreuzberg

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

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

相关文章

Windows程序设计29:对话框之间的数据传递

文章目录 前言一、父子对话框之间的数据传递1.父窗口获取子窗口数据2.子窗口获取父窗口数据 二、类外函数调用窗口的操作1.全局变量方式2.参数传递方式 总结 前言 Windows程序设计29:对话框之间的数据传递。 在Windows程序设计28:MFC模态与非模态对话框…

【C语言】第八期——指针

目录 1 初始指针 2 获取变量的地址 3 定义指针变量、取地址、取值 3.1 定义指针变量 3.2 取地址、取值 4 对指针变量进行读写操作 5 指针变量作为函数参数 6 数组与指针 6.1 指针元素指向数组 6.2 指针加减运算(了解) 6.2.1 指针加减具体数字…

为 Power Automate 注册 Adobe PDF Services

前言 最近,再测试如何将HTML转换成PDF,然后发现Adobe有一个免费的操作可以用,好开心,赶紧注册一下。 正文 1.先注册一个账号,然后登录到Adobe Developer 注册链接:https://www.adobe.com/go/getstarted_pow…

BY组态:工业自动化的未来,触手可及

1. BY组态软件的核心优势 简单易用:图形化界面,降低学习成本,快速上手。 高效灵活:支持多种设备协议,兼容性强,适用于多种行业。 实时监控:提供实时数据采集与可视化,助力高效决策…

有哪些开源大数据处理项目使用了大模型

以下是一些使用了大模型的开源大数据处理项目: 1. **RedPajama**:这是一个开源项目,使用了LLM大语言模型数据处理组件,对GitHub代码数据进行清洗和处理。具体流程包括数据清洗、过滤低质量样本、识别和删除重复样本等步骤。 2. …

网络安全之攻防笔记--通用安全漏洞SQL注入sqlmapOraclemongodbDB2

通用安全漏洞SQL注入&sqlmap&Oracle&mongodb&DB2 数据库类型 ACCESS 特性 没数据库用户 没数据库权限 没数据库查询参数 没有高权限注入说法 暴力猜解,借助字典得到数据 注入方式 联合注入 偏移注入 表名列名猜解不到 偏移注入 MySQL 低权限 常…

【信息系统项目管理师-案例真题】2022下半年案例分析答案和详解

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 试题一(24分)【问题1】(6分)【问题2】(10分)【问题3】(8分)试题二(26分)【问题1】(8分)【问题2】(8分)【问题3】(4分)【问题4】(6分)试题三(25分)【问题1】(12分)【问题2】(7分)【问题…

正点原子[第三期]Arm(iMX6U)Linux系统移植和根文件系统构建-5.3 xxx_defconfig过程

前言: 本文是根据哔哩哔哩网站上“arm(iMX6U)Linux系统移植和根文件系统构键篇”视频的学习笔记,在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。 引用: …

C++初阶——简单实现list

目录 1、前言 2、List.h 3、Test.cpp 1、前言 1. 简单实现std::list,重点:迭代器,模板类,运算符重载。 2. 并不是,所有的类,都需要深拷贝,像迭代器类模板,只是用别的类的资源&am…

conda环境中运行“python --version“所得的版本与环境中的python版本不一致----deepseek并非全能

conda环境中运行python —version所得python版本与conda环境中的python版本不一致------deepseek并非全能 问题 conda环境中运行python —version所得python版本与conda环境中的python版本不一致 我所做的探索 1 网页搜索 2 求助于DeepSeek 可以用四个字来形容deepseek给出…

HarmonyOS学习第5天: Hello World的诞生之旅

鸿蒙初印象:开启探索之门 在操作系统的广袤天地中,HarmonyOS(鸿蒙系统)宛如一颗冉冉升起的新星,自诞生起便备受瞩目。它由华为倾力打造,是一款基于微内核的全场景分布式操作系统,以其独特的技术…

centos9安装k8s集群

以下是基于CentOS Stream 9的Kubernetes 1.28.2完整安装流程(containerd版): 一、系统初始化(所有节点执行) # 关闭防火墙 systemctl disable --now firewalld# 关闭SELinux sed -i "s/SELINUXenforcing/SELINU…

CIG容器重量级监控系统

1.介绍 CAdvisorinfluxDBGranfana docker 原生命令 监控docker容器状态 docker stats 2.CAdvicsor 3.InfluxDB 4.Granafana 5.搭建 volumes:grafana_data: services:influxdb:image: tutum/influxdbrestart: alwaysenvironment:- PRE_CREATE_DBcadvisorports:- "8083…

REACT学习DAY02(恨连接不上服务器)

受控表单绑定 概念&#xff1a;使用React组件的状态&#xff08;useState&#xff09;控制表单的状态 1. 准备一个React状态值 const [value,setValue] useState() 2. 通过value属性绑定状态&#xff0c;通过onChange属性绑定状态同步的函数 <input type"text&quo…

python——GUI图形用户界面编程

GUI简介 我们前面实现的都是基于控制台的程序&#xff0c;程序和用户的交互通过控制台来完成 本章&#xff0c;我们来学习GUI图形用户界面编程&#xff0c;我们可以通过python提供的丰富的组件&#xff0c;快速的视线使用图形界面和用户交互 GUI变成类似于“搭积木”&#x…

DeepSeek 助力 Vue 开发:打造丝滑的单选按钮(Radio Button)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

美颜相机1.0

项目开发步骤 1 界面开发 美颜相机界面构成&#xff1a; 标题 尺寸 关闭方式 位置 可视化 2 创建主函数调用界面方法 3 添加两个面板 一个是按钮面板一个是图片面板 用JPanel 4 添加按钮到按钮面吧【注意&#xff1a;此时要用初始化按钮面板的方法initBtnPanel 并且将按钮添…

openharmony中hdf框架的驱动消息机制的实现原理

openharmony中hdf框架的驱动消息机制的实现原理 在分析hdf框架时发现绕来绕去的&#xff0c;整体梳理画了一遍流程图&#xff0c;发现还是有点模糊甚至不清楚如何使用的&#xff0c;详细的每个点都去剖析细节又过于消耗时间&#xff0c;所以有时间便从功能应用的角度一块块的去…

leaflet实现历史轨迹播放效果

效果图如下&#xff1a; 效果实现&#xff1a; 1、添加完整轨迹线&#xff0c;蓝色的 this.echoLine L.polyline(points, { weight: 8 }).addTo(this.map) 2、添加实时轨迹线&#xff0c;初始状态置空 this.realEchoLine L.polyline([], { weight: 12, color: "#FF9…

JAVAEE一>Spring IoC和DI详解

目录 Spring容器说明&#xff1a;Ioc容器优势&#xff1a;DI介绍&#xff1a;从Spring获取对象&#xff1a;获取对象的方法&#xff1a;关于上下文的概念&#xff1a; Controller注解&#xff08;控制层&#xff1a;接收参数并响应&#xff09;&#xff1a;Service注解&#xf…