Skip to main content

Document components for the Sayou Data Platform

Project description

sayou-document

Build Status License: Apache 2.0 Docs

sayou-document is a high-fidelity document parsing library for Python. It converts various document formats (PDF, DOCX, PPTX, XLSX) into a single, unified JSON structure, focusing on extracting rich, structured data, not just plain text.

This library is a foundational "Extractor" component of the Sayou Data Platform, designed for data-driven AI and advanced RAG pipelines that require a reliable, structured data source.

Philosophy

sayou-document is designed to be an extractor, not an interpreter. It focuses on capturing the raw, structural facts of a document—"this text is bold, 16pt, and at (x0, y0)"—and preserving them with high fidelity.

This reliable, structured data provides a robust foundation for any downstream processing or AI pipeline.

🚀 Key Features

  • Unified Schema: One consistent JSON structure for all document types.
  • High-Fidelity: Extracts text, tables, images, charts, bounding boxes, and metadata.
  • Multi-Format: Out-of-the-box support for:
    • PDF (.pdf)
    • Word (.docx)
    • PowerPoint (.pptx)
    • Excel (.xlsx)
  • Layout Preservation: Captures headers, footers (Word), table of contents (PDF), and slide notes (PPTX).
  • Pluggable OCR: Easily integrate any OCR engine to extract text from scanned PDFs and embedded images.
  • Part of an Ecosystem: Designed to be the first step, feeding structured data into sayou-refinery, sayou-chunking, and ultimately sayou-rag.

📦 Installation

pip install sayou-document

# To include default OCR capabilities or converters (optional)
# pip install sayou-document[ocr]

⚡ Quickstart

The DocumentPipeline is the primary interface. It automatically routes the file to the correct parser and returns a standardized Document object.

import os
from sayou.document.pipeline import DocumentPipeline
# Optional: Add an OCR engine plugin
# from sayou.document.plugins.ocr import GoogleVisionOCR

# 1. Initialize the pipeline
pipeline = DocumentPipeline()

# Optional: Inject an OCR engine (Tier 3 Plugin)
# ocr_engine = GoogleVisionOCR(credentials="path/to/creds.json")
# pipeline = DocumentPipeline(ocr_engine=ocr_engine)

pipeline.initialize()

# 2. Load your file
file_path = "path/to/your/document.pptx"
file_name = os.path.basename(file_path)

with open(file_path, "rb") as f:
    file_bytes = f.read()

# 3. Run the pipeline
try:
    # 'doc' is a Pydantic object
    doc = pipeline.run(file_bytes, file_name)

    # 4. Get the unified JSON output
    json_output = doc.model_dump_json(indent=2)

    # Save the result
    with open(f"parsed_{file_name}.json", "w", encoding="utf-8") as f:
        f.write(json_output)
    
    print(f"Successfully parsed {file_name}")

except ValueError as e:
    print(f"Error parsing {file_name}: {e}")

Example JSON Output (Truncated)

The Document object provides a clean, predictable structure.

{
  "file_name": "document.pptx",
  "file_id": "document.pptx",
  "doc_type": "slide",
  "metadata": {
    "title": "My Presentation",
    "author": "Sayou"
  },
  "page_count": 1,
  "pages": [
    {
      "page_num": 1,
      "width": 1280.0,
      "height": 720.0,
      "elements": [
        {
          "id": "p1:shape:100",
          "type": "text",
          "bbox": { "x0": 100.0, "y0": 50.0, "x1": 500.0, "y1": 100.0 },
          "raw_attributes": {
            "placeholder_type": "TITLE"
          },
          "text": "This is the Main Title",
          "meta": { "page_num": 1, "id": "p1:shape:100" }
        },
        {
          "id": "p1:shape:101",
          "type": "chart",
          "bbox": { "x0": 100.0, "y0": 150.0, "x1": 600.0, "y1": 400.0 },
          "raw_attributes": {
            "series_count": 2
          },
          "chart_title": "Sales Data",
          "chart_type": "BAR_CLUSTERED",
          "text_representation": "Chart: Sales Data...\n- Series 1: [10, 20, 30]\n",
          "meta": { "page_num": 1, "id": "p1:shape:101" }
        }
      ],
      "note_text": "Remember to emphasize the Q4 growth."
    }
  ],
  "toc": []
}

🗺️ Roadmap (v0.1.0+)

sayou-document v0.0.1 provides a robust foundation. Our next steps focus on deepening the "High-Fidelity" promise:

  • Annotations: Extracting PDF comments, highlights, and sticky notes.
  • Advanced Styles: Capturing detailed cell-level formatting (borders, fills) from Excel and Word tables.
  • Structural Semantics: Parsing footnotes, endnotes, and list structures (bullets/numbering) from Word.
  • HWP Support: Adding a (Tier 3) converter plugin for .hwp files.

🤝 Contributing

We welcome contributions! If you are interested in improving sayou-document or building new parsers/plugins, please check our contributing guidelines (TODO) and open an issue.

📜 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.4.tar.gz (21.8 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.4-py3-none-any.whl (26.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: sayou_document-0.1.4.tar.gz
  • Upload date:
  • Size: 21.8 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.4.tar.gz
Algorithm Hash digest
SHA256 aabff990a827fbdd8d6e347e8ecc3d477fd21d43364a739d533c231a091f86ab
MD5 0fe8fefefa6335c25a21512e854f1a1e
BLAKE2b-256 f6a76f350e1f04d7e5a5088e0aae4ca3cbdd95f89ff0f6c90bfebfdfe87f395b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: sayou_document-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 26.0 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.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 91a50152fa9de8e64fb6e589c439eeb88fb04de3a9a0cd61edaa801950c45c48
MD5 da68dc58633a38a49e7fa8f70f46a7ad
BLAKE2b-256 fa08aa23e8bd7ee874f2e193dca659c7c916754adb6b9845c77311123fe7400b

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