Skip to main content

Document components for the Sayou Data Platform

Project description

sayou-document

PyPI version License Docs

The Universal Document Parsing Gateway for Sayou Fabric.

sayou-document is a high-fidelity parsing engine that converts diverse document formats (PDF, DOCX, PPTX, XLSX, Images) into a unified, structured Document Object Model (DOM).

Unlike simple text extractors, it preserves the semantic structure of documents—headers, tables, charts, and layout coordinates—making it ideal for RAG (Retrieval-Augmented Generation) and Layout-aware LLM applications.

💡 Core Philosophy

"One Interface, High Fidelity."

We abstract away the complexity of proprietary file formats. Whether it's a slide deck or a spreadsheet, sayou-document normalizes it into a consistent Document > Page > Element hierarchy.

  1. Smart Routing: Automatically detects file types (and converts images to PDF if needed) to select the optimal parser.
  2. Hybrid Extraction: Combines native text extraction with OCR fallback for scanned pages or images.
  3. Strict Schema: Outputs data strictly adhering to Pydantic models, ready for the next pipeline stage (Refinery).
flowchart LR
    File[Raw File] --> Pipeline[Document Pipeline]
    Pipeline -->|PDF/Image| OCR[PDF Parser + OCR]
    Pipeline -->|Office| Office[DOCX/PPTX/XLSX Parser]
    OCR --> DOM[Structured Document Model]
    Office --> DOM

📦 Installation

pip install sayou-document

# For OCR support (requires Tesseract installed on OS)
pip install "sayou-document[ocr]"

⚡ Quick Start

The DocumentPipeline handles file detection, conversion, and parsing automatically.

import os
from sayou.document.pipeline import DocumentPipeline

def run_demo():
    # 1. Initialize Pipeline (with optional OCR)
    pipeline = DocumentPipeline(use_default_ocr=True)
    pipeline.initialize()

    # 2. Parse a file (PDF, Word, Excel, PPT, or Image)
    file_path = "quarterly_report.pdf"
    # file_path = "scan_image.png"  # Images are auto-converted to PDF & OCR'd
    
    with open(file_path, "rb") as f:
        file_bytes = f.read()
        
    doc = pipeline.run(file_bytes, os.path.basename(file_path))
    
    if doc:
        print(f"File: {doc.file_name} ({doc.doc_type})")
        print(f"Pages: {doc.page_count}")
        
        # 3. Access Structured Data
        first_page = doc.pages[0]
        if first_page.elements:
            print(f"Content Preview: {first_page.elements[0].text[:100]}...")
        
        # Export to JSON
        print(doc.model_dump_json(indent=2))

if __name__ == "__main__":
    run_demo()

🔑 Key Components

Parsers

  • PdfParser: Extracts text, images, and TOC from PDFs using PyMuPDF. Supports full-page OCR for scanned documents.
  • DocxParser: Parses Word documents, preserving heading levels and table structures.
  • PptxParser: Extracts text frames, notes, and tables from slides.
  • ExcelParser: Converts sheets into table elements and extracts embedded images.

Converters & OCR

  • ImageToPdfConverter: Automatically converts JPG/PNG images to PDF to leverage the robust PDF parsing pipeline.
  • TesseractOCR: (Optional) Provides OCR capabilities for handling scanned content and embedded images.

🤝 Contributing

We welcome contributions for new Parsers (e.g., HwpParser for Korean documents, HtmlParser) or Enhanced OCR integrations (e.g., Google Vision API).

📜 License

Apache 2.0 License © 2025 Sayouzone

Project details


Download files

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

Source Distribution

sayou_document-0.2.1.tar.gz (28.0 kB view details)

Uploaded Source

Built Distribution

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

sayou_document-0.2.1-py3-none-any.whl (30.5 kB view details)

Uploaded Python 3

File details

Details for the file sayou_document-0.2.1.tar.gz.

File metadata

  • Download URL: sayou_document-0.2.1.tar.gz
  • Upload date:
  • Size: 28.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for sayou_document-0.2.1.tar.gz
Algorithm Hash digest
SHA256 9fc6b6a076870f2dc53769815464e8e3999d0640cc1fc3447764fb0e451ffea1
MD5 2f18fd0aefd65e4c12007671a406c7e6
BLAKE2b-256 0a08241dda92e368897723450a2c5d42370ac5c5621c61dee52f809e33c15b45

See more details on using hashes here.

File details

Details for the file sayou_document-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: sayou_document-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 30.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for sayou_document-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 261992f58c2d7b1ab4542a2e6a16e0ce0ba18e728c23354f3ccc5e3218d8e513
MD5 0b4a9222fc6f8a40e410373e53fe986d
BLAKE2b-256 7b611edb4fbc3f655a889d48f259ed54ca1f6e31581a08b0334fc96361de6b56

See more details on using hashes here.

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