# PDF Processing Module for ATOM A comprehensive PDF processing system with OCR capabilities, image comprehension, and memory storage integration for the ATOM platform. ## Overview This module provides advanced PDF processing capabilities for ATOM, including: - **Text Extraction**: Extract text from searchable PDFs using PyPDF2 - **OCR Processing**: Optical Character Recognition for scanned PDFs and images - **Image Comprehension**: AI-powered understanding of visual content using OpenAI Vision - **Memory Integration**: Store processed content in LanceDB for semantic search - **Fallback Strategies**: Graceful degradation when external services are unavailable ## Features ### Core Processing - **Multi-format Support**: Process PDFs from files, URLs, or byte streams - **Smart PDF Detection**: Automatically detect searchable vs scanned PDFs - **OCR with Fallback**: Cascade through multiple OCR engines (Tesseract, EasyOCR, OpenAI) - **Image Extraction**: Extract and process embedded images - **Batch Processing**: Support for processing multiple PDFs efficiently ### Memory Storage - **Vector Embeddings**: Generate embeddings for semantic search - **Metadata Management**: Store comprehensive document metadata - **Semantic Search**: Find documents based on content similarity - **Document Statistics**: Track usage and storage metrics - **Tag-based Organization**: Categorize documents with custom tags ### Integration Features - **RESTful API**: Complete API for integration with other services - **Health Monitoring**: Service status and capability reporting - **Error Handling**: Robust error handling with detailed feedback - **Configuration**: Flexible configuration for different environments ## Installation ### System Dependencies **Ubuntu/Debian:** ```bash sudo apt-get update sudo apt-get install tesseract-ocr poppler-utils ``` **macOS:** ```bash brew install tesseract poppler ``` **Windows:** - Download Tesseract from [GitHub releases](https://github.com/UB-Mannheim/tesseract/wiki) - Download Poppler from [poppler-windows releases](https://github.com/oschwartz10612/poppler-windows/releases/) ### Python Dependencies Add the following to your `requirements.txt`: ```txt # PDF Processing PyPDF2>=3.0.0,<4.0.0 pdf2image>=1.16.3,<2.0.0 pillow>=10.0.0,<11.0.0 # OCR Libraries pytesseract>=0.3.10,<1.0.0 easyocr>=1.7.0,<2.0.0 # AI Vision (Optional) openai>=1.0.0,<2.0.0 # Image Processing numpy>=1.24.0,<2.0.0 opencv-python>=4.8.0,<5.0.0 ``` ## Configuration ### Environment Variables ```bash # OpenAI API Key (for advanced image comprehension) OPENAI_API_KEY=your_openai_api_key_here # Tesseract Path (if not in PATH) TESSERACT_PATH=/usr/bin/tesseract # OCR Languages (comma-separated) OCR_LANGUAGES=en,es,fr,de # LanceDB Configuration LANCEDB_URI=./data/lancedb ``` ### Service Initialization ```python from atom.backend.integrations.pdf_processing import PDFOCRService, PDFMemoryIntegration # Initialize OCR Service pdf_service = PDFOCRService( openai_api_key=os.getenv('OPENAI_API_KEY'), tesseract_path=os.getenv('TESSERACT_PATH'), easyocr_languages=['en', 'es'] # Default: ['en'] ) # Initialize Memory Integration memory_service = PDFMemoryIntegration(lancedb_handler=your_lancedb_handler) ``` ## API Endpoints ### PDF Processing Endpoints #### `POST /pdf/process` Process a PDF file with optional OCR and image comprehension. **Parameters:** - `file`: PDF file upload (required) - `use_ocr`: Use OCR for scanned PDFs (default: true) - `extract_images`: Extract and process images (default: true) - `use_advanced_comprehension`: Use AI for image understanding (default: false) - `fallback_strategy`: "cascade" or "parallel" (default: "cascade") **Response:** ```json { "processing_summary": { "used_ocr": true, "ocr_methods_tried": ["tesseract", "easyocr"], "best_method": "tesseract", "total_pages": 10, "total_characters": 2500 }, "extracted_content": { "text": "Extracted text content...", "page_breakdown": [...], "images": {...} }, "service_status": {...} } ``` #### `POST /pdf/process-url` Process a PDF from a URL. #### `POST /pdf/extract-text-only` Fast text extraction without OCR. #### `POST /pdf/analyze-pdf-type` Analyze PDF type without full processing. ### Memory Integration Endpoints #### `POST /pdf-memory/store` Store processed PDF in memory system. #### `GET /pdf-memory/search` Search PDF documents using semantic search. #### `GET /pdf-memory/documents/{doc_id}` Retrieve a specific document. #### `DELETE /pdf-memory/documents/{doc_id}` Delete a document from memory. #### `GET /pdf-memory/users/{user_id}/stats` Get document statistics for a user. ## Usage Examples ### Basic PDF Processing ```python from atom.backend.integrations.pdf_processing import PDFOCRService # Initialize service service = PDFOCRService() # Process a PDF file with open('document.pdf', 'rb') as f: result = await service.process_pdf( pdf_data=f.read(), use_ocr=True, extract_images=True ) print(f"Extracted {result['processing_summary']['total_characters']} characters") print(f"Used method: {result['processing_summary']['best_method']}") ``` ### Memory Integration ```python from atom.backend.integrations.pdf_processing import PDFMemoryIntegration # Initialize memory service memory_service = PDFMemoryIntegration(lancedb_handler=lancedb_handler) # Store processed PDF storage_result = await memory_service.store_processed_pdf( user_id="user_123", processing_result=processing_result, source_uri="file:///documents/report.pdf", tags=["report", "quarterly", "finance"] ) # Search documents search_results = await memory_service.search_pdfs( user_id="user_123", query="quarterly financial report", limit=10, similarity_threshold=0.7 ) ``` ### Complete Workflow ```python async def process_and_store_pdf(user_id: str, file_path: str): # Process PDF with open(file_path, 'rb') as f: processing_result = await pdf_service.process_pdf(f.read()) # Store in memory storage_result = await memory_service.store_processed_pdf( user_id=user_id, processing_result=processing_result, source_uri=f"file://{file_path}" ) return storage_result ``` ## Fallback Strategies The system implements intelligent fallback mechanisms: 1. **Cascade Strategy**: Try methods in order of preference - OpenAI Vision (if available and requested) - EasyOCR - Tesseract - Basic PyPDF2 extraction 2. **Parallel Strategy**: Try all methods and pick the best result 3. **Service Availability**: Automatically detect available OCR engines ## Error Handling The module provides comprehensive error handling: - **File Validation**: Validate PDF files before processing - **Service Availability**: Check OCR engine availability - **API Rate Limits**: Handle external API limitations - **Memory Constraints**: Manage large document processing - **Network Issues**: Handle connectivity problems gracefully ## Performance Considerations - **Large Documents**: Process documents in chunks for memory efficiency - **Batch Processing**: Use batch endpoints for multiple documents - **Caching**: Implement caching for frequently accessed documents - **Background Processing**: Use async processing for better performance ## Testing Run the test suite: ```bash cd atom/backend/integrations/pdf_processing python -m pytest tests/ -v ``` ## Contributing 1. Fork the repository 2. Create a feature branch 3. Add tests for new functionality 4. Ensure all tests pass 5. Submit a pull request ## License This module is part of the ATOM platform and follows the same licensing terms. ## Support For issues and questions: - Create an issue in the ATOM repository - Check the documentation - Contact the development team