Phase 7: Hoàn thiện Modular RAG Backend với FastAPI và Đa LLM Provider
This commit is contained in:
193
doc/11.Appendix-PDF-Inspection-and-TextLayer-Detection.md
Normal file
193
doc/11.Appendix-PDF-Inspection-and-TextLayer-Detection.md
Normal file
@@ -0,0 +1,193 @@
|
||||
# 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.*
|
||||
Reference in New Issue
Block a user