Files
poc_system/doc/11.Appendix-PDF-Inspection-and-TextLayer-Detection.md

4.2 KiB
Raw Blame History

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 110. 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)

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:

{
  "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.