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.pswp.cn/diannao/70666.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/70666.shtml
英文地址,請注明出處:http://en.pswp.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…