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

我们经常需要从各种不同类型的文档中提取文本内容,无论是办公文档、图像还是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, PSMMode async 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, ExtractionResult

async 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_sync async 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_sync async 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_file

async def process_pdf():
# 强制对可搜索的PDF进行OCR
result = 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_file

async 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

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

  1. C#word(2007)操作类--新建文档、添加页眉页脚、设置格式、添加文本和超链接、添加图片、表格处理、文档格式转化

    转:http://www.cnblogs.com/lantionzy/archive/2009/10/23/1588511.html 1.新建Word文档 #region 新建Word文档/// &l ...

  2. Aspose最新版文档格式转换使用破解

    Aspose简介 Aspose.Total是Aspose公司旗下全套文件格式处理解决方案,提供最完整.最高效的文档处理解决方案集,无需任何其他软件安装和依赖.主要提供.net.java.C++d三个开 ...

  3. 导出WPS office文档格式的说明

     针对microsoft office的文档格式,WPS office分别提供wps对应doc,et对应xls两种格式,word和excel是办公系统使用的普及度最广的文件格式,而国内的政府行政单 ...

  4. 【好文翻译】一步一步教你使用Spire.Doc转换Word文档格式

    背景: 年11月,微软宣布作为ECMA国际主要合作伙伴,将其开发的基于XML的文件格式标准化,称之为"Office Open XML" .Open XML的引进使office文档结 ...

  5. 【itext】7步制作兼容各种文档格式的Itext5页眉页脚 实现page x pf y

    itext5页眉页脚工具类,实现page x of y 完美兼容各种格式大小文档A4/B5/B3,兼容各种文档格式自动计算页脚XY轴坐标 鉴于没人做的这么细致,自己就写了一个itext5页眉页脚工具类 ...

  6. 使用DOM4J解析XML文档,以及使用XPath提取XML文档

    使用DOM4J解析XML文档 需要首先下载DOM4J工具包.这是个第三方工具包 在使用DOM4J解析的时候需要导入 DOM4J的JAR包 下载DOM4J工具包->在MyEclipse中新建lib ...

  7. Java导出freemarker实现下载word文档格式功能

    首先呢,先说一下制作freemarker模板步骤, 1. 在WPS上写出所要的下载的word格式当做模板 2. 把模板内不固定的内容(例:从数据库读取的信息)写成123或者好代替的文字标注 3. 把固 ...

  8. wordxml文档格式说明

    近期需要对word xml文档进行各种操作,需要熟悉 wordxml 文档格式,搜索了一番后发现 open xml sdk 官网的文档最好.就按照官网说明来记录一番 1 word xml 文档基本格式 ...

  9. windwos文档格式转换成unix格式

    在工作学习中我们避免不了需要将一些脚本和命令记录在笔记里面,我使用的是有道云笔记,每当我将上次记录在有道云的脚本复制出来进行使用的时候,总会报一些奇怪的错误,要么是包含换行符,要么就是格式不对,但是我 ...

  10. Java利用jacob实现文档格式转换

    实现文档格式之间的转换,我使用的是jacob-1.7版本,需要jacob.jar来调用activex控件,本机需安装WPS/office,还需要jacob.jar以及jacob.dll 其中:    ...

随机推荐

  1. SQL注入之联合查询注入

    SQL注入之联合查询注入 一.联合查询注入原理 联合查询注入是一种常见的SQL注入攻击手法,其核心原理是利用SQL中的UNION操作符将多个SELECT语句的结果集合并,从而返回一个统一的结果集.在使 ...

  2. mybatis之xml简单映射,解决实体类属性字段与数据库表字段不一致问题

    当实体类属性字段与数据库表字段不一致时该怎么办? 方法一:起别名 <select id="getUserList" resultType="RealUser&quo ...

  3. .Net Core3.1 集成Log4net

    1.准备 首先nuget添加下引用  Microsoft.Extensions.Logging.Log4Net.AspNetCore 目前的版本为v3.1.0 ,添加完成后我们开始注册. 2.注册 2 ...

  4. flutter ios 深色模式下状态栏文字是白色的,白色背景下看不见

    flutter ios 深色模式下状态栏文字是白色的,白色背景下看不见 theme: ThemeData( appBarTheme: const AppBarTheme( systemOverlayS ...

  5. CentOS7搭建CDH5.16.2集群 HA高可用(包含Spark2等组件部署)

    CentOS7搭建CDH5.16.2集群 HA高可用   机器准备:(这里HA是对HDFS和YARN的高可用) 主机名 cpu内存 bigdata-master01 8c32G bigdata-mas ...

  6. 我的公众号接入了DeepSeek-R1模型,成为了一个会深度思考的强大.NET AI智能体!

    前言 前不久腾讯元器宣布接入满血版 Deepseek R1 模型,模型免费使用且不限量,为智能体开发提供更多样化的模型选择,带来更丰富的智能体功能和玩法. 今天咱们一起来把我公众号的.NET AI智能 ...

  7. C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)

    前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...

  8. ollama系列1:轻松3步本地部署deepseek,普通电脑可用

    本文主要介绍如何通过ollama快速部署deepseek.qwq.llama3.gemma3等大模型,网速好的小伙伴10分钟就能搞定.让你摆脱GPU焦虑,在普通电脑上面玩转大模型. 安装指南(无废话版 ...

  9. npm ERR! request to https://registry.npm.taobao.org/axios failed, reason: certificate has expired

    前言 一直使用 npm build没问题的,突然出现报错: npm WARN install Usage of the `--dev` option is deprecated. Use `--onl ...

  10. Flask快速入门4-蓝图

    十六,Flask 用蓝图实现模块化的应用 1,Flask 为什么使用蓝图? Flask 中的蓝图为这些情况设计: 把一个应用分解为一个蓝图的集合.这对大型应用是理想的.一个项目可以实例化 一个应用对象 ...