Kreuzberg:本地OCR+多格式解析!Kreuzberg如何用Python暴力提取30+文档格式?程序员看完直呼内行!
生活随笔
收集整理的這篇文章主要介紹了
Kreuzberg:本地OCR+多格式解析!Kreuzberg如何用Python暴力提取30+文档格式?程序员看完直呼内行!
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
嗨,大家好,我是小華同學(xué),關(guān)注我們獲得“最新、最全、最優(yōu)質(zhì)”開源項(xiàng)目和高效工作學(xué)習(xí)方法
我們經(jīng)常需要從各種不同類型的文檔中提取文本內(nèi)容,無論是辦公文檔、圖像還是PDF文件。而Kreuzberg這個(gè)Python庫的出現(xiàn),為我們提供了一個(gè)極為便捷且高效的解決方案。
一、Kreuzberg簡介
Kreuzberg是一個(gè)專注于從文檔中提取文本的Python庫。它具有很多令人心動的特性,使得它在文本提取領(lǐng)域脫穎而出。
(一)特色亮點(diǎn)
- 簡單便捷(Simple and Hassle - Free)
- 它擁有簡潔的API,無需復(fù)雜的配置就能正常工作。這對于開發(fā)者來說是一個(gè)巨大的優(yōu)勢,不需要花費(fèi)大量的時(shí)間在繁瑣的設(shè)置上,就能夠快速地將其集成到自己的項(xiàng)目中。
- 本地處理(Local Processing)
- 不需要進(jìn)行外部API調(diào)用,也沒有云依賴。這意味著在使用Kreuzberg時(shí),不用擔(dān)心網(wǎng)絡(luò)連接問題,也不會因?yàn)樵品?wù)的限制而受到影響。同時(shí),數(shù)據(jù)的安全性也得到了保障,因?yàn)樗械奶幚矶荚诒镜剡M(jìn)行。
- 資源高效(Resource Efficient)
- 它是輕量級的處理方式,不需要GPU的支持。這使得它可以在各種不同配置的設(shè)備上運(yùn)行,無論是普通的筆記本電腦還是服務(wù)器,都能夠輕松應(yīng)對文本提取任務(wù)。
- 包體小巧(Small Package Size)
- 它的依賴項(xiàng)經(jīng)過精心挑選,占用空間極小。這對于那些對空間要求比較嚴(yán)格的項(xiàng)目來說是非常友好的,不會因?yàn)橐胍粋€(gè)庫而導(dǎo)致項(xiàng)目的體積大幅增加。
- 格式支持廣泛(Format Support)
- 全面支持各種文檔、圖像和文本格式。無論是常見的PDF、Word文檔,還是各種圖像格式,甚至是一些特定的研究格式,Kreuzberg都能夠進(jìn)行文本提取。
- 現(xiàn)代Python風(fēng)格(Modern Python)
- 采用了async/await、類型提示以及函數(shù)式優(yōu)先的方法構(gòu)建。這使得代碼更加簡潔、高效,也符合現(xiàn)代Python編程的最佳實(shí)踐。
- 開源友好(Permissive OSS)
- Kreuzberg及其依賴項(xiàng)都采用了寬松的開源許可證,這鼓勵了更多的開發(fā)者參與到項(xiàng)目的改進(jìn)和擴(kuò)展中來。
(二)應(yīng)用場景
- RAG(Retrieval Augmented Generation)應(yīng)用
- Kreuzberg專為RAG應(yīng)用而構(gòu)建,在這些應(yīng)用中,本地處理且依賴最少是非常重要的。例如在一些本地的知識檢索和文本生成系統(tǒng)中,Kreuzberg可以快速準(zhǔn)確地從各種文檔中提取文本內(nèi)容,為后續(xù)的知識檢索和文本生成提供基礎(chǔ)數(shù)據(jù)。
- 現(xiàn)代異步應(yīng)用(Modern Async Applications)
- 在現(xiàn)代的異步應(yīng)用中,Kreuzberg的異步接口能夠很好地與其他異步組件協(xié)同工作。比如在一個(gè)網(wǎng)絡(luò)爬蟲項(xiàng)目中,需要從下載的各種文檔中提取文本內(nèi)容,Kreuzberg的異步接口可以提高整個(gè)系統(tǒng)的效率,避免阻塞等待。
- 無服務(wù)器函數(shù)(Serverless Functions)
- 在無服務(wù)器函數(shù)環(huán)境中,由于資源有限且對性能要求較高,Kreuzberg的輕量級和高效的特點(diǎn)就能夠發(fā)揮作用。它可以在無服務(wù)器函數(shù)中快速地處理文檔文本提取任務(wù),而不會占用過多的資源。
- 容器化應(yīng)用(Dockerized Applications)
- 對于容器化的應(yīng)用,Kreuzberg的本地處理和小體積的特點(diǎn)非常適合。在一個(gè)容器化的文檔處理系統(tǒng)中,可以方便地將Kreuzberg集成進(jìn)去,對容器內(nèi)的各種文檔進(jìn)行文本提取操作。
二、Kreuzberg的安裝
- 安裝Python包
- 首先,使用
pip install kreuzberg命令就可以輕松安裝Kreuzberg這個(gè)Python包。
- 首先,使用
- 安裝系統(tǒng)依賴項(xiàng)
- Kreuzberg需要兩個(gè)系統(tǒng)級別的依賴項(xiàng):
- Pandoc:用于文檔格式轉(zhuǎn)換,最低要求的版本是Pandoc 2。
- 在Linux(Ubuntu)系統(tǒng)下,可以使用
sudo apt - get install pandoc tesseract - ocr命令來安裝。 - 在MacOS系統(tǒng)下,可以使用
brew install tesseract pandoc命令來安裝。 - 在Windows系統(tǒng)下,可以使用
choco install - y tesseract pandoc命令來安裝。
- 在Linux(Ubuntu)系統(tǒng)下,可以使用
- Tesseract OCR:用于圖像和PDF的OCR(光學(xué)字符識別),最低要求的版本是Tesseract 4。
- 需要注意的是,在大多數(shù)發(fā)行版中,tesseract - ocr包可能會被拆分成多個(gè)包,除了英語之外,如果需要其他語言模型,可能需要單獨(dú)安裝。同時(shí),建議查閱這些庫的官方文檔,以獲取針對自己平臺的最新安裝說明。
- Pandoc:用于文檔格式轉(zhuǎn)換,最低要求的版本是Pandoc 2。
- Kreuzberg需要兩個(gè)系統(tǒng)級別的依賴項(xiàng):
三、Kreuzberg的架構(gòu)
- PDF處理(PDF Processing)
- 對于PDF文件,Kreuzberg采用了不同的策略。對于可搜索的PDF,它使用
pdfium2進(jìn)行文本提取;對于掃描內(nèi)容,則使用Tesseract OCR。這樣的組合方式能夠有效地處理各種類型的PDF文件,無論是原生的可搜索PDF還是掃描得到的圖像型PDF。
- 對于PDF文件,Kreuzberg采用了不同的策略。對于可搜索的PDF,它使用
- 文檔轉(zhuǎn)換(Document Conversion)
- Pandoc:用于處理多種文檔和標(biāo)記格式。
- python - pptx:專門用于處理PowerPoint文件。
- html - to - markdown:用于處理HTML內(nèi)容。
- calamine:用于處理Excel電子表格(支持多工作表)。
- 文本處理(Text Processing)
- 它具備智能編碼檢測功能,能夠很好地處理Markdown和純文本。
四、支持的格式
- 文檔格式(Document Formats)
- PDF(.pdf,包括可搜索和掃描類型):這是最常見的文檔格式之一,無論是可直接提取文本的PDF還是需要OCR識別的掃描版PDF,Kreuzberg都能處理。
- Microsoft Word(.docx):在辦公場景中廣泛使用的Word文檔,Kreuzberg可以從中提取出文本內(nèi)容。
- PowerPoint演示文稿(.pptx):對于PPT文件,Kreuzberg能夠提取其中的文本信息,這對于需要對PPT內(nèi)容進(jìn)行分析或者轉(zhuǎn)換的場景非常有用。
- OpenDocument Text(.odt):一種開源的文檔格式,Kreuzberg同樣支持對其進(jìn)行文本提取。
- Rich Text Format(.rtf):這種格式在一些早期的文檔編輯中比較常見,Kreuzberg也可以對其進(jìn)行處理。
- EPUB(.epub):電子圖書的常見格式,Kreuzberg能夠從EPUB文件中提取出文本內(nèi)容,方便對電子書內(nèi)容進(jìn)行分析或者轉(zhuǎn)換。
- DocBook XML(.dbk,.xml):在文檔編寫和發(fā)布領(lǐng)域中使用的一種XML格式,Kreuzberg支持對其進(jìn)行文本提取。
- FictionBook(.fb2):主要用于電子小說的格式,Kreuzberg可以從這種格式的文件中提取文本。
- LaTeX(.tex,.latex):在學(xué)術(shù)和科研領(lǐng)域廣泛使用的排版系統(tǒng),Kreuzberg能夠從LaTeX文件中提取出文本內(nèi)容。
- Typst(.typ):一種新興的標(biāo)記語言,Kreuzberg也對其進(jìn)行了支持。
- 標(biāo)記和文本格式(Markup and Text Formats)
- HTML(.html,.htm):網(wǎng)頁的基本格式,Kreuzberg可以從HTML文件中提取出其中的文本內(nèi)容,這對于網(wǎng)頁內(nèi)容的分析和處理非常有用。
- 純文本(.txt)和Markdown(.md,.markdown):這是最基本的文本格式,Kreuzberg能夠很好地處理它們,無論是簡單的純文本文件還是帶有標(biāo)記的Markdown文件。
- reStructuredText(.rst):一種輕量級的標(biāo)記語言,Kreuzberg支持對其進(jìn)行文本提取。
- Org - mode(.org):在Emacs等編輯器中廣泛使用的一種模式,Kreuzberg可以從這種模式的文件中提取文本。
- DokuWiki(.txt):一種用于維基的文本格式,Kreuzberg能夠從其中提取文本。
- Pod(.pod):一種文檔格式,Kreuzberg支持對其進(jìn)行文本提取。
- Troff/Man(.1,.2等):在Unix系統(tǒng)中用于編寫手冊頁的格式,Kreuzberg可以從這種格式的文件中提取文本。
- 數(shù)據(jù)和研究格式(Data and Research Formats)
- 電子表格(.xlsx,.xls,.xlsm,.xlsb,.xlam,.xla,.ods):無論是微軟的Excel格式還是開源的ODS格式,Kreuzberg都能夠從其中提取出文本內(nèi)容,這對于數(shù)據(jù)分析和處理非常有用。
- CSV(.csv)和TSV(.tsv)文件:這是常見的數(shù)據(jù)存儲格式,Kreuzberg可以從這些文件中提取出文本內(nèi)容。
- OPML文件(.opml):一種用于大綱的格式,Kreuzberg支持對其進(jìn)行文本提取。
- Jupyter Notebooks(.ipynb):在數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)領(lǐng)域廣泛使用的筆記本格式,Kreuzberg能夠從Jupyter筆記本中提取出文本內(nèi)容。
- BibTeX(.bib)和BibLaTeX(.bib):在學(xué)術(shù)文獻(xiàn)管理中使用的格式,Kreuzberg可以從這些格式的文件中提取出文本內(nèi)容。
- CSL - JSON(.json):一種用于文獻(xiàn)引用樣式的JSON格式,Kreuzberg支持對其進(jìn)行文本提取。
- EndNote和JATS XML(.xml):在文獻(xiàn)管理和學(xué)術(shù)出版領(lǐng)域使用的XML格式,Kreuzberg支持對其進(jìn)行文本提取。
- RIS(.ris):一種用于文獻(xiàn)引用的格式,Kreuzberg可以從這種格式的文件中提取出文本內(nèi)容。
- 圖像格式(Image Formats)
- JPEG(.jpg,.jpeg,.pjpeg):最常見的圖像格式之一,Kreuzberg可以對JPEG圖像進(jìn)行OCR識別并提取出文本內(nèi)容。
- PNG(.png):另一種常見的圖像格式,Kreuzberg同樣可以對其進(jìn)行處理。
- TIFF(.tiff,.tif):在一些專業(yè)領(lǐng)域如印刷和攝影中使用的圖像格式,Kreuzberg能夠?qū)IFF圖像進(jìn)行OCR識別。
- BMP(.bmp):一種簡單的圖像格式,Kreuzberg可以對BMP圖像進(jìn)行OCR識別。
- GIF(.gif):動畫圖像格式,Kreuzberg能夠?qū)IF圖像進(jìn)行OCR識別并提取文本內(nèi)容。
- JPEG 2000家族(.jp2,.jpm,.jpx,.mj2):JPEG的升級版格式,Kreuzberg也可以對其進(jìn)行處理。
- WebP(.webp):一種新興的圖像格式,Kreuzberg支持對其進(jìn)行OCR識別。
- 便攜式anymap格式(.pbm,.pgm,.ppm,.pnm):這些不太常見的圖像格式,Kreuzberg同樣可以進(jìn)行OCR識別并提取文本內(nèi)容。
五、Kreuzberg的用法
- 單項(xiàng)目處理(Single Item Processing)
- extract_file():這是一個(gè)異步函數(shù),用于從文件(可以接受字符串路徑或者
pathlib.Path類型)中提取文本。例如:
- extract_file():這是一個(gè)異步函數(shù),用于從文件(可以接受字符串路徑或者
import asyncio
from pathlib import Path
from kreuzberg import extract_file, ExtractionResult, PSMMode
async def extract_document():
# 從PDF文件中以默認(rèn)設(shè)置提取
pdf_result: ExtractionResult = await extract_file("document.pdf")
print(f"Content: {pdf_result.content}")
asyncio.run(extract_document())
- extract_bytes():異步函數(shù),用于從字節(jié)(接受字節(jié)字符串)中提取文本。例如:
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()的同步版本。
- 批處理(Batch Processing)
- batch_extract_file():異步函數(shù),用于同時(shí)從多個(gè)文件中提取文本。例如:
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:
# 從多個(gè)文件中提取
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():異步函數(shù),用于同時(shí)從多個(gè)字節(jié)內(nèi)容中提取文本。例如:
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:
# 每個(gè)項(xiàng)目是(內(nèi)容,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()的同步版本。
六、配置參數(shù)
- OCR配置(OCR Configuration)
- force_ocr(默認(rèn)值為False):即使對于可搜索的PDF,也強(qiáng)制進(jìn)行OCR處理。例如:
from kreuzberg import extract_file
async def process_pdf():
# 強(qiáng)制對可搜索的PDF進(jìn)行OCR
result = await extract_file("document.pdf", force_ocr = True)
print(result.content)
asyncio.run(process_pdf())
- language(默認(rèn)值為eng):指定Tesseract OCR的語言模型。這會影響不同語言文檔的文本識別準(zhǔn)確性。例如,
eng代表英語,deu代表德語,eng+deu代表英語和德語。需要注意的是,語言的順序會影響處理時(shí)間,第一個(gè)語言是主要語言,第二個(gè)語言是次要語言等。 - psm(Page Segmentation Mode,默認(rèn)值為PSM.AUTO):控制Tesseract如何分析頁面布局。在大多數(shù)情況下,不需要將其更改為其他值,但如果有特殊需求,可以根據(jù)Tesseract的文檔進(jìn)行調(diào)整。
- 處理配置(Processing Configuration)
- max_processes(默認(rèn)值為CPU數(shù)量):Tesseract的最大并發(fā)進(jìn)程數(shù)。例如:
from kreuzberg import extract_file
async def process_pdf():
# 控制OCR并發(fā)數(shù)
result = await extract_file(
"large_document.pdf",
max_processes = 4
)
print(result.content)
asyncio.run(process_pdf())
總結(jié)
Kreuzberg是一個(gè)功能強(qiáng)大的Python庫,專為從各種文檔中提取文本而設(shè)計(jì),支持PDF、圖像、辦公文檔等多種格式。它以簡單便捷、本地處理、資源高效等特性脫穎而出,無需復(fù)雜配置即可快速集成到項(xiàng)目中。Kreuzberg適用于RAG應(yīng)用、現(xiàn)代異步應(yīng)用、無服務(wù)器函數(shù)和容器化應(yīng)用等多種場景,為開發(fā)者提供了極大的便利。
項(xiàng)目地址
https://github.com/Goldziher/kreuzberg
總結(jié)
以上是生活随笔為你收集整理的Kreuzberg:本地OCR+多格式解析!Kreuzberg如何用Python暴力提取30+文档格式?程序员看完直呼内行!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 太喜欢啦,浏览器中的SQL神器:What
- 下一篇: Web客户端开发