# 11.Appendix-PDF-Inspection-and-TextLayer-Detection.md > **Phụ lục chiến lược nhận diện PDF (text-based vs scan vs drawing)**. > > ⚠️ Phụ lục này **KHÔNG chỉnh sửa** các file 1–10. > Mục tiêu: **chuẩn hoá cách hệ thống hiểu PDF trước khi quyết định OCR / MarkItDown**. > > Đây là phụ lục then chốt để **không xử lý OCR sai loại PDF**, đặc biệt trong môi trường có nhiều bản vẽ kỹ thuật. --- ## 1. Vì sao cần inspection PDF riêng? Trong hệ thống doanh nghiệp, `.pdf` là extension **dễ gây hiểu nhầm nhất**: - PDF có thể là: - Văn bản thuần (text layer) - Scan ảnh (image-only) - Bản vẽ kỹ thuật (vector + text rải rác) ⚠️ **Không được quyết định OCR chỉ dựa trên việc "là PDF"**. --- ## 2. Ba loại PDF cần phân biệt (BẮT BUỘC) ### 2.1 PDF loại 1 – Text-based PDF **Đặc điểm** - Có text layer thật - Có thể select/copy text - Thường sinh ra từ Word, InDesign, LaTeX **Xử lý** - ❌ Không OCR - ✅ Đưa thẳng vào MarkItDown --- ### 2.2 PDF loại 2 – Scan / Image-based PDF **Đặc điểm** - Không có text layer - Toàn bộ là ảnh - Scan từ giấy **Xử lý** - ✅ OCR là BẮT BUỘC - ✅ OCR page-wise - ✅ Sau OCR mới đưa vào MarkItDown --- ### 2.3 PDF loại 3 – Technical Drawing PDF **Đặc điểm** - Nội dung chính là hình vẽ kỹ thuật - Text rải rác (ký hiệu, mã số) - Có thể có vector + text layer **Xử lý** - ❌ Không OCR toàn bộ - ❌ Không MarkItDown - ✅ Metadata-only indexing - ✅ OCR giới hạn (title block) nếu cần --- ## 3. PDF Inspection Flow (Luồng quyết định) ```text PDF file ↓ Quick inspection ├─ Has text layer? ├─ Text density? ├─ Page structure? ↓ Classify: - TEXT_PDF - SCAN_PDF - DRAWING_PDF ``` --- ## 4. Heuristics xác định Text-based PDF Một PDF được coi là **TEXT_PDF** khi: - Có text layer trên >70% số trang - Text density đủ lớn (nhiều hơn nhãn/ký hiệu) - Không có layout dạng drawing ✅ Ví dụ tiêu biểu - Quy định - Hợp đồng - Hướng dẫn --- ## 5. Heuristics xác định Scan PDF Một PDF được coi là **SCAN_PDF** khi: - Không có text layer - Page rendering = image - OCR text length = 0 trước OCR ✅ Đây là target chính của OCR tiếng Việt --- ## 6. Heuristics xác định Drawing PDF (RẤT QUAN TRỌNG) Một PDF bị coi là **DRAWING_PDF** khi: - Text layer rất ít nhưng: - Có vector shapes - Có line dày đặc - Page ratio lớn (A1, A0) - Text xuất hiện chủ yếu ở: - Title block - Legend ⚠️ Thoả các dấu hiệu trên → **KHÔNG đưa vào OCR/MarkItDown dù có text layer**. --- ## 7. Vì sao Drawing PDF KHÔNG được OCR đại trà - OCR sinh rất nhiều noise - Text không mang ý nghĩa ngôn ngữ - RAG dễ hallucinate nguy hiểm ✅ Nguyên tắc: > **Drawing PDF chỉ để TRA CỨU, không để ĐỌC bằng AI**. --- ## 8. Quyết định xử lý theo loại PDF | PDF Type | OCR | MarkItDown | Search | RAG | |--------|-----|------------|--------|-----| | TEXT_PDF | ❌ | ✅ | ✅ | ✅ | | SCAN_PDF | ✅ | ✅ | ✅ | ✅ | | DRAWING_PDF | ❌ (limited) | ❌ | ✅ (metadata) | ❌ | --- ## 9. OCR Scope áp dụng cho PDF ### Chỉ OCR khi: - Classified = SCAN_PDF ### OCR giới hạn khi: - Classified = DRAWING_PDF - Mục tiêu: title, revision, project code --- ## 10. Logging & Audit bắt buộc Mỗi PDF phải có log: ```json { "pdf_type": "SCAN_PDF", "decision_reason": "No text layer detected", "ocr_applied": true } ``` --- ## 11. Lợi ích kiến trúc - ✅ Không OCR sai PDF - ✅ Không đưa bản vẽ vào RAG - ✅ Giảm chi phí OCR - ✅ Tránh hallucination nguy hiểm --- ## 12. Kết luận phụ lục - PDF inspection là **bước bắt buộc trước OCR** - TEXT ≠ SCAN ≠ DRAWING - OCR và MarkItDown chỉ là công cụ, **không phải đích đến** --- *Phụ lục này là nền tảng để thiết kế bước tích hợp OCR trong hệ thống.*