Skip to main content

High-performance document intelligence library for Python. Extract text, metadata, and structured data from PDFs, Office documents, images, and 50+ formats. Powered by Rust core for 10-50x speed improvements.

Project description

Python

Banner2

Extract text, tables, images, and metadata from 56 file formats including PDF, Office documents, and images. Native Python bindings with async/await support, multiple OCR backends (Tesseract, EasyOCR, PaddleOCR), and extensible plugin system.

Installation

Package Installation

Install via pip:

pip install kreuzberg

For async support and additional features:

pip install kreuzberg[async]

System Requirements

  • Python 3.10+ required
  • Optional: ONNX Runtime version 1.22.x for embeddings support
  • Optional: Tesseract OCR for OCR functionality

Quick Start

Basic Extraction

Extract text, metadata, and structure from any supported document format:

import asyncio
from kreuzberg import extract_file, ExtractionConfig

async def main() -> None:
    config = ExtractionConfig(
        use_cache=True,
        enable_quality_processing=True
    )
    result = await extract_file("document.pdf", config=config)
    print(result.content)

asyncio.run(main())

Common Use Cases

Extract with Custom Configuration

Most use cases benefit from configuration to control extraction behavior:

With OCR (for scanned documents):

import asyncio
from kreuzberg import extract_file

async def main() -> None:
    result = await extract_file("document.pdf")
    print(result.content)

asyncio.run(main())

Table Extraction

import asyncio
from kreuzberg import extract_file

async def main() -> None:
    result = await extract_file("document.pdf")

    content: str = result.content
    tables: int = len(result.tables)
    format_type: str | None = result.metadata.format_type

    print(f"Content length: {len(content)} characters")
    print(f"Tables found: {tables}")
    print(f"Format: {format_type}")

asyncio.run(main())

Processing Multiple Files

import asyncio
from kreuzberg import extract_file, ExtractionConfig, OcrConfig, TesseractConfig

async def main() -> None:
    config = ExtractionConfig(
        force_ocr=True,
        ocr=OcrConfig(
            backend="tesseract",
            language="eng",
            tesseract_config=TesseractConfig(psm=3)
        )
    )
    result = await extract_file("scanned.pdf", config=config)
    print(result.content)
    print(f"Detected Languages: {result.detected_languages}")

asyncio.run(main())

Async Processing

For non-blocking document processing:

import asyncio
from pathlib import Path
from kreuzberg import extract_file

async def main() -> None:
    file_path: Path = Path("document.pdf")

    result = await extract_file(file_path)

    print(f"Content: {result.content}")
    print(f"MIME Type: {result.metadata.format_type}")
    print(f"Tables: {len(result.tables)}")

asyncio.run(main())

Next Steps

Features

Supported File Formats (56+)

56 file formats across 8 major categories with intelligent format detection and comprehensive metadata extraction.

Office Documents

Category Formats Capabilities
Word Processing .docx, .odt Full text, tables, images, metadata, styles
Spreadsheets .xlsx, .xlsm, .xlsb, .xls, .xla, .xlam, .xltm, .ods Sheet data, formulas, cell metadata, charts
Presentations .pptx, .ppt, .ppsx Slides, speaker notes, images, metadata
PDF .pdf Text, tables, images, metadata, OCR support
eBooks .epub, .fb2 Chapters, metadata, embedded resources

Images (OCR-Enabled)

Category Formats Features
Raster .png, .jpg, .jpeg, .gif, .webp, .bmp, .tiff, .tif OCR, table detection, EXIF metadata, dimensions, color space
Advanced .jp2, .jpx, .jpm, .mj2, .pnm, .pbm, .pgm, .ppm OCR, table detection, format-specific metadata
Vector .svg DOM parsing, embedded text, graphics metadata

Web & Data

Category Formats Features
Markup .html, .htm, .xhtml, .xml, .svg DOM parsing, metadata (Open Graph, Twitter Card), link extraction
Structured Data .json, .yaml, .yml, .toml, .csv, .tsv Schema detection, nested structures, validation
Text & Markdown .txt, .md, .markdown, .rst, .org, .rtf CommonMark, GFM, reStructuredText, Org Mode

Email & Archives

Category Formats Features
Email .eml, .msg Headers, body (HTML/plain), attachments, threading
Archives .zip, .tar, .tgz, .gz, .7z File listing, nested archives, metadata

Academic & Scientific

Category Formats Features
Citations .bib, .biblatex, .ris, .enw, .csl Bibliography parsing, citation extraction
Scientific .tex, .latex, .typst, .jats, .ipynb, .docbook LaTeX, Jupyter notebooks, PubMed JATS
Documentation .opml, .pod, .mdoc, .troff Technical documentation formats

Complete Format Reference

Key Capabilities

  • Text Extraction - Extract all text content with position and formatting information

  • Metadata Extraction - Retrieve document properties, creation date, author, etc.

  • Table Extraction - Parse tables with structure and cell content preservation

  • Image Extraction - Extract embedded images and render page previews

  • OCR Support - Integrate multiple OCR backends for scanned documents

  • Async/Await - Non-blocking document processing with concurrent operations

  • Plugin System - Extensible post-processing for custom text transformation

  • Embeddings - Generate vector embeddings using ONNX Runtime models

  • Batch Processing - Efficiently process multiple documents in parallel

  • Memory Efficient - Stream large files without loading entirely into memory

  • Language Detection - Detect and support multiple languages in documents

  • Configuration - Fine-grained control over extraction behavior

Performance Characteristics

Format Speed Memory Notes
PDF (text) 10-100 MB/s ~50MB per doc Fastest extraction
Office docs 20-200 MB/s ~100MB per doc DOCX, XLSX, PPTX
Images (OCR) 1-5 MB/s Variable Depends on OCR backend
Archives 5-50 MB/s ~200MB per doc ZIP, TAR, etc.
Web formats 50-200 MB/s Streaming HTML, XML, JSON

OCR Support

Kreuzberg supports multiple OCR backends for extracting text from scanned documents and images:

  • Tesseract

  • Easyocr

  • Paddleocr

OCR Configuration Example

import asyncio
from kreuzberg import extract_file

async def main() -> None:
    result = await extract_file("document.pdf")
    print(result.content)

asyncio.run(main())

Async Support

This binding provides full async/await support for non-blocking document processing:

import asyncio
from pathlib import Path
from kreuzberg import extract_file

async def main() -> None:
    file_path: Path = Path("document.pdf")

    result = await extract_file(file_path)

    print(f"Content: {result.content}")
    print(f"MIME Type: {result.metadata.format_type}")
    print(f"Tables: {len(result.tables)}")

asyncio.run(main())

Plugin System

Kreuzberg supports extensible post-processing plugins for custom text transformation and filtering.

For detailed plugin documentation, visit Plugin System Guide.

Embeddings Support

Generate vector embeddings for extracted text using the built-in ONNX Runtime support. Requires ONNX Runtime installation.

Embeddings Guide

Batch Processing

Process multiple documents efficiently:

import asyncio
from kreuzberg import extract_file, ExtractionConfig, OcrConfig, TesseractConfig

async def main() -> None:
    config = ExtractionConfig(
        force_ocr=True,
        ocr=OcrConfig(
            backend="tesseract",
            language="eng",
            tesseract_config=TesseractConfig(psm=3)
        )
    )
    result = await extract_file("scanned.pdf", config=config)
    print(result.content)
    print(f"Detected Languages: {result.detected_languages}")

asyncio.run(main())

Configuration

For advanced configuration options including language detection, table extraction, OCR settings, and more:

Configuration Guide

Documentation

Troubleshooting

For common issues and solutions, visit Troubleshooting Guide.

Contributing

Contributions are welcome! See Contributing Guide.

License

MIT License - see LICENSE file for details.

Support

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kreuzberg-4.0.0.tar.gz (891.8 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

kreuzberg-4.0.0-cp310-abi3-win_amd64.whl (16.7 MB view details)

Uploaded CPython 3.10+Windows x86-64

kreuzberg-4.0.0-cp310-abi3-manylinux_2_39_aarch64.whl (16.1 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.39+ ARM64

kreuzberg-4.0.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (16.4 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ x86-64

kreuzberg-4.0.0-cp310-abi3-macosx_14_0_arm64.whl (14.4 MB view details)

Uploaded CPython 3.10+macOS 14.0+ ARM64

File details

Details for the file kreuzberg-4.0.0.tar.gz.

File metadata

  • Download URL: kreuzberg-4.0.0.tar.gz
  • Upload date:
  • Size: 891.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for kreuzberg-4.0.0.tar.gz
Algorithm Hash digest
SHA256 6e77d45daa04f5a19c39986669494af81f45ed6785a4fd5052c545032aecbe1a
MD5 3a8ecaff353112ff1ed89ad2ce55d7a8
BLAKE2b-256 629d5f066651018cea7bb3a62ea3eabf75c86f70547851812a7a75c7885ec603

See more details on using hashes here.

Provenance

The following attestation bundles were made for kreuzberg-4.0.0.tar.gz:

Publisher: publish.yaml on kreuzberg-dev/kreuzberg

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file kreuzberg-4.0.0-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: kreuzberg-4.0.0-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 16.7 MB
  • Tags: CPython 3.10+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for kreuzberg-4.0.0-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 3d43da70cd2b2d269edadaf2b63978b73f1c2c650575e47d297a41e6a59df2d4
MD5 4087ab1d93e338b581c6e5e1962f4462
BLAKE2b-256 5b860e1ec4e14391d662ecc258c7f315694af9cc967ab5d004538c6cc6b6f1b9

See more details on using hashes here.

Provenance

The following attestation bundles were made for kreuzberg-4.0.0-cp310-abi3-win_amd64.whl:

Publisher: publish.yaml on kreuzberg-dev/kreuzberg

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file kreuzberg-4.0.0-cp310-abi3-manylinux_2_39_aarch64.whl.

File metadata

File hashes

Hashes for kreuzberg-4.0.0-cp310-abi3-manylinux_2_39_aarch64.whl
Algorithm Hash digest
SHA256 a50d02b1d186d91cc9c9f6fb6f55a3a64329523547b62f977312a64d77ffaf5c
MD5 c973fad628c331c86e04c2a6da4d230a
BLAKE2b-256 6e696a28d47f36a49436faa21ee983bffab904cd60e73546e4b74e79f46eaba4

See more details on using hashes here.

Provenance

The following attestation bundles were made for kreuzberg-4.0.0-cp310-abi3-manylinux_2_39_aarch64.whl:

Publisher: publish.yaml on kreuzberg-dev/kreuzberg

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file kreuzberg-4.0.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for kreuzberg-4.0.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8a28f130e44a541a57788e6091b2937fd807ecd9494d0c9d88f92d0d4bdec973
MD5 0099e091c381e5c6c802826f42beb964
BLAKE2b-256 7dfc58f4ec12bcd6748919441fed1508baa6fd980d2970d57cd6999afddac963

See more details on using hashes here.

Provenance

The following attestation bundles were made for kreuzberg-4.0.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yaml on kreuzberg-dev/kreuzberg

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file kreuzberg-4.0.0-cp310-abi3-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for kreuzberg-4.0.0-cp310-abi3-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 035904da04342bf38023a57ce51ac69e1b07b1c886015ce7ef3755a15625a907
MD5 88c600fdf29bfc455d56b730efc2631a
BLAKE2b-256 c725dfa3ee7a98a8c255bc7f6b7be7dc0ab179f388e648a7a2fa074d0af2e51b

See more details on using hashes here.

Provenance

The following attestation bundles were made for kreuzberg-4.0.0-cp310-abi3-macosx_14_0_arm64.whl:

Publisher: publish.yaml on kreuzberg-dev/kreuzberg

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page