When a source document is a scanned image (a photographed page, a scanned form, an image-based PDF) rather than embedded digital text, OCR (Optical Character Recognition) is required to extract any text at all before RAG ingestion can proceed.
Text-Based vs Image-Based PDFs — A Critical Distinction
Text-based PDF: text is stored as actual character data —
standard extraction libraries can read it directly, no OCR needed.
Image-based (scanned) PDF: each page is essentially a photograph —
there's no embedded text at all. Standard extraction returns
empty or near-empty text. OCR is required to even attempt
extracting the visible words.
A pipeline that doesn't check for this distinction can silently "ingest" a scanned document with zero actual extracted content — a serious, easy-to-miss failure mode.
Basic OCR Flow
def extract_with_ocr(image_or_scanned_pdf):
text = ocr_engine.recognize(image_or_scanned_pdf)
# OCR output often needs additional cleaning — see below
return text
OCR Introduces Its Own Error Types
| OCR Error | Example |
|---|---|
| Character misrecognition | "l" read as "1", "O" read as "0" |
| Layout/reading-order issues | Similar to PDF column problems — OCR can misread multi-column scanned pages |
| Poor scan quality | Low resolution, skewed pages, or handwriting can produce significantly degraded text |
OCR output typically benefits from an explicit review/cleaning pass (see Document Cleaning) more than clean digital-text extraction does, since OCR errors are a real, common source of degraded retrieval quality if left unaddressed.
Practical Use Case
Digitized historical archives, scanned legal/medical forms, and photographed receipts or invoices are common real-world scenarios requiring OCR before any RAG ingestion is even possible — worth budgeting real time for quality-checking OCR output on a representative sample before trusting the pipeline at scale.
Common Mistakes
- Not detecting that a document is image-based before attempting standard text extraction, resulting in silently empty ingested content
- Trusting OCR output at face value without spot-checking accuracy on representative samples, especially for low-quality scans
- Not accounting for OCR's additional processing time and cost compared to native text extraction when planning an ingestion pipeline
Interview Relevance
"A document was ingested into a RAG system but the chatbot has no knowledge of its content. What would you check?" — whether the source was actually an image-based/scanned document that silently failed standard text extraction, requiring OCR instead, is exactly the kind of practical diagnostic this tests.
Practice Question
Design a check in an ingestion pipeline that detects whether a PDF page likely requires OCR (i.e., contains no meaningful embedded text) before attempting standard extraction.