194 lines
4.2 KiB
Markdown
194 lines
4.2 KiB
Markdown
# 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.*
|