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.1.10.tar.gz (26.6 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.1.10-py3-none-any.whl (28.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: sayou_document-0.1.10.tar.gz
  • Upload date:
  • Size: 26.6 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.1.10.tar.gz
Algorithm Hash digest
SHA256 a71fd72723fca4c51488b1b493c330db00f13627a9cbc7d71886e843227654aa
MD5 8142e1f82a0e44879f0f23301bf14a09
BLAKE2b-256 91fda90a3498dc5ac1b11a05ce9b30b12dcc62c52bc217c61b53327b2d10eb62

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sayou_document-0.1.10-py3-none-any.whl
Algorithm Hash digest
SHA256 cc1ed0c1ac57e8d159d04453a0714ae7f24dc08cb794a36523f5fc054963e7cf
MD5 542b369db999760836574c590a9a7c0d
BLAKE2b-256 0001be04141250fec47c6912f6ad14af5d85e4df5e1bac4df28d34d2b59ba51f

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