Skip to main content

Quick Start Examples

Parse Your First Document

from cerevox import Lexa

# Initialize the client
client = Lexa()  # Uses CEREVOX_API_KEY from environment

# Parse a financial document
documents = client.parse("invoice.pdf")

# Real output - not just {...}
doc = documents[0]
print(f"✅ Extracted {len(doc.content)} characters")
print(f"📊 Found {len(doc.tables)} tables")
print(f"💰 Content preview: {doc.content[:200]}...")

# Returns actual structured data:
# "Invoice #INV-2024-001
#  Bill To: Acme Corporation
#  Amount Due: $1,299.99
#  Due Date: 2024-02-15"
from cerevox import Lexa

client = Lexa()

# Process multiple documents efficiently
files = [
    "contracts/service-agreement.pdf",
    "invoices/january-2024.xlsx", 
    "reports/quarterly-analysis.docx"
]

documents = client.parse(files)

# See what you got
print(f"✅ Processed {len(documents)} documents")
for i, doc in enumerate(documents, 1):
    print(f"  📄 Document {i}: {len(doc.content)} chars, {len(doc.tables)} tables")

# Real results ready for your application
from cerevox import Lexa

client = Lexa()

# Parse raw content (great for testing)
test_content = b"""
INVOICE #12345
Date: 2024-01-15
Bill To: Tech Startup Inc.
Amount: $2,499.99
Description: AI Consulting Services
"""

documents = client.parse(test_content)
print(f"✅ Test successful: {documents[0].content}")

# Returns exactly what you put in, structured and ready

Real-World Use Cases

Financial Document Processing

from cerevox import Lexa

client = Lexa()

# Parse financial documents
documents = client.parse([
    "invoices/q1-2024-invoices.pdf",
    "statements/bank-statement.pdf",
    "receipts/expense-receipts.xlsx"
])

# Extract key financial data
for doc in documents:
    # Lexa preserves financial formatting
    print(f"Document: {doc.title}")
    print(f"Tables found: {len(doc.tables)}")
    
    # Tables contain actual structured data
    if doc.tables:
        table = doc.tables[0]  # First table
        print(f"Financial data: {table.rows} rows x {table.columns} columns")
        # Each table has real data, not placeholders

# Ready for accounting software integration
from cerevox import Lexa

client = Lexa()

# Parse legal contracts
documents = client.parse("contracts/service-agreement.pdf")

doc = documents[0]
print(f"Contract length: {len(doc.content)} characters")
print(f"Key sections preserved: {len(doc.sections)} sections")

# Lexa maintains document structure for legal analysis
# Perfect for contract review workflows

Research & Analysis

from cerevox import Lexa

client = Lexa()

# Parse research documents
documents = client.parse([
    "papers/ai-research-2024.pdf",
    "reports/market-analysis.docx",
    "data/survey-results.xlsx"
])

# Get structured research data
for doc in documents:
    print(f"📚 Paper: {doc.title}")
    print(f"📖 Content: {len(doc.content)} chars")
    print(f"📊 Data tables: {len(doc.tables)} tables")
    print(f"🖼️  Figures: {len(doc.images)} images")

# All formatting and structure preserved
from cerevox import Lexa

client = Lexa()

# Parse market intelligence documents
documents = client.parse("reports/industry-report-2024.pdf")

doc = documents[0]
print(f"Report sections: {len(doc.sections)}")
print(f"Market data tables: {len(doc.tables)}")

# Extract market insights with structure intact
# Ready for business intelligence tools

Vector Database Integration

RAG Application Ready

from cerevox import Lexa

client = Lexa()

# Parse documents for RAG
documents = client.parse([
    "knowledge-base/product-docs.pdf",
    "support/troubleshooting.docx"
])

# Get perfectly sized chunks
chunks = documents.get_all_text_chunks(
    target_size=500,        # Perfect for most embedding models
    overlap_size=50,        # Prevents context loss
    include_metadata=True   # Rich metadata included
)

print(f"🔗 Ready for embedding: {len(chunks)} chunks")

# Each chunk is optimized for vector databases
for chunk in chunks[:2]:  # Show first 2
    print(f"\nChunk preview: {chunk.content[:100]}...")
    print(f"Metadata: page={chunk.page_number}, source={chunk.source_file}")
    # Rich metadata for better retrieval
from cerevox import Lexa
import pinecone  # or your preferred vector DB

client = Lexa()

# Parse and chunk in one step
documents = client.parse("knowledge-base/")
chunks = documents.get_all_text_chunks(target_size=500)

# Ready for your vector database
vectors = []
for chunk in chunks:
    # Each chunk has everything you need
    vectors.append({
        'id': chunk.id,
        'values': your_embedding_model(chunk.content),  # Your embedding
        'metadata': {
            'text': chunk.content,
            'page': chunk.page_number,
            'source': chunk.source_file,
            # Rich metadata preserved
        }
    })

# Upload to vector database
# pinecone.upsert(vectors=vectors)
print(f"✅ {len(vectors)} vectors ready for database")
from cerevox import Lexa

client = Lexa()

# Parse FAQ documents  
documents = client.parse("support/faq-database.pdf")

# Get semantic search ready chunks
chunks = documents.get_all_text_chunks(
    target_size=300,        # Shorter for FAQ
    preserve_questions=True # Keep Q&A structure
)

print(f"🔍 Search ready: {len(chunks)} FAQ chunks")

# Each chunk maintains question-answer structure
# Perfect for semantic search applications

Different Input Methods

File Processing

from cerevox import Lexa
from pathlib import Path

client = Lexa()

# Single file
doc = client.parse("reports/annual-report.pdf")[0]
print(f"✅ Parsed: {len(doc.content)} characters")

# Multiple files with Path objects
docs_folder = Path("documents")
pdf_files = list(docs_folder.glob("*.pdf"))
documents = client.parse(pdf_files)
print(f"✅ Processed {len(documents)} PDF files")

# Mixed file types - Lexa handles them all
mixed_files = [
    "data.xlsx",      # Excel spreadsheet
    "report.docx",    # Word document  
    "slides.pptx",    # PowerPoint
    "data.csv",       # CSV file
    "webpage.html"    # HTML file
]
documents = client.parse(mixed_files)
print(f"✅ Processed {len(documents)} mixed format files")
from cerevox import Lexa
from io import BytesIO

client = Lexa()

# Process bytes directly
with open("document.pdf", "rb") as f:
    content = f.read()

documents = client.parse(content)
print("✅ Processed raw bytes")

# Process file-like objects
stream = BytesIO(content)
documents = client.parse(stream)
print("✅ Processed from stream")

# Perfect for web uploads and API integrations

URL Processing

from cerevox import Lexa

client = Lexa()

# Parse from web URLs
url = "https://www.sec.gov/Archives/edgar/data/320193/000032019323000077/aapl-20230930.htm"
documents = client.parse_urls(url)

print(f"✅ Downloaded and parsed SEC filing")
print(f"📄 Content: {len(documents[0].content)} characters")
print(f"📊 Tables: {len(documents[0].tables)} financial tables")

# Real SEC data, properly structured
from cerevox import Lexa

client = Lexa()

# Process multiple URLs efficiently
urls = [
    "https://example.com/quarterly-report-q1.pdf",
    "https://example.com/quarterly-report-q2.pdf", 
    "https://example.com/quarterly-report-q3.pdf"
]

documents = client.parse_urls(urls)
print(f"✅ Processed {len(documents)} quarterly reports")

# All downloaded and parsed concurrently
for i, doc in enumerate(documents):
    print(f"  Q{i+1} Report: {len(doc.content)} chars, {len(doc.tables)} tables")

Processing Modes & Options

Performance Optimization

from cerevox import Lexa, ProcessingMode

client = Lexa()

# Default mode - fast and efficient (recommended)
documents = client.parse(
    "standard-document.pdf",
    mode=ProcessingMode.DEFAULT  # Fast processing for most use cases
)
print("✅ Fast processing complete")

# Advanced mode - maximum accuracy
documents = client.parse(
    "complex-report.pdf", 
    mode=ProcessingMode.ADVANCED  # Use for complex documents requiring maximum accuracy
)
print("✅ Advanced processing complete")
from cerevox import Lexa

def progress_callback(status):
    print(f"📊 Status: {status.status}")
    if hasattr(status, 'progress'):
        print(f"📈 Progress: {status.progress}%")

client = Lexa()

# Track progress for large jobs
documents = client.parse(
    ["large-file1.pdf", "large-file2.pdf"],
    progress_callback=progress_callback,
    timeout=300.0,      # 5 minute timeout
    poll_interval=5.0   # Check every 5 seconds
)

print("✅ Large batch processing complete")

Error Handling

from cerevox import Lexa, LexaError

client = Lexa()

def safe_parse(files):
    try:
        documents = client.parse(files)
        print(f"✅ Successfully parsed {len(documents)} documents")
        return documents
        
    except LexaError as e:
        print(f"❌ Lexa API error: {e.message}")
        if "authentication" in e.message.lower():
            print("💡 Check your API key")
        elif "timeout" in e.message.lower():
            print("💡 Try smaller batches or increase timeout")
        return None
        
    except Exception as e:
        print(f"❌ Unexpected error: {e}")
        return None

# Use with any files
documents = safe_parse(["document1.pdf", "document2.docx"])
from cerevox import Lexa, LexaError
import time

client = Lexa()

def parse_with_retry(files, max_retries=3):
    for attempt in range(max_retries):
        try:
            documents = client.parse(files)
            print(f"✅ Success on attempt {attempt + 1}")
            return documents
            
        except LexaError as e:
            if attempt < max_retries - 1:
                wait_time = 2 ** attempt  # Exponential backoff
                print(f"⏳ Attempt {attempt + 1} failed, retrying in {wait_time}s...")
                time.sleep(wait_time)
            else:
                print(f"❌ Failed after {max_retries} attempts: {e.message}")
                raise
                
        except Exception as e:
            print(f"❌ Unexpected error: {e}")
            raise

# Production-ready parsing
documents = parse_with_retry(["critical-document.pdf"])

Ready for more? Check out async processing for handling multiple documents concurrently, or cloud integrations for S3, SharePoint, and more.