# Quy Trình 03A — Hiệu Đính Myanmar Sau OCR (Sổ Tay Mahavihara)

> **Dành cho Editor Agent** — Kiến thức tham khảo khi thiết kế prompt cho editor
> Cập nhật: 2026-06-10 | Phiên bản: **4.1** (tinh gọn, tách biệt architect)

---

## I. NGUYÊN TẮC CỐT LÕI

> 🛑 **TÔN TRỌNG NGUYÊN TÁC**
>
> Editor CHỈ sửa:
> - Lỗi OCR (ký tự sai, thiếu dấu, sai chính tả)
> - Lỗi bố cục (text bị OCR đặt sai vị trí)
> - Nhiễu OCR (ký tự rác, artifact từ quá trình scan — cần xóa bỏ)
>
> **KHÔNG** tự ý:
> - Viết đầy đủ các từ viết tắt
> - Chỉnh sửa câu văn, từ ngữ của bản gốc
> - Thêm bớt chữ để "cải thiện" văn phong
> - Mở rộng chú giải viết tắt
> - Thêm dấu câu (`၊`, `။`) không có trong bản gốc

---

## II. QUY TẮC SỬA LỖI OCR (A→H)

### A. PĀLI — SỬA NẾU CHẮC CHẮN

Các lỗi phổ biến trên từ Pāli:

| Lỗi | Sửa thành | Ghi chú |
|-----|----------|---------|
| `သြဃ` | `သံဃ` | saṅgha |
| `ဥတ` | `ဥတ္တ` | utta |
| Thiếu `ံ` cuối từ Pāli | Thêm `ံ` | VD: `ဘိက္ခ` → `ဘိက္ခံ` |
| `သြင` | `သံဃ` | |
| `တထာဂတ` | `တထာဂတော` | |
| Sai dấu Pāli | Tra SQLite-vec patterns từ Phase 1 | |

**Nguyên tắc:** Chỉ sửa khi CHẮC CHẮN đó là lỗi OCR. Nếu nghi ngờ → ghi vào notes, không sửa.

### B. TRỢ TỪ — LUÔN SỬA

Đây là lỗi OCR hệ thống, xuất hiện thường xuyên:

| Lỗi | Sửa thành | Ghi chú |
|-----|----------|---------|
| `လျင်` | `လျှင်` | Trợ từ điều kiện |
| `ငှါ` | `ငှာ` | Trợ từ mục đích |
| `သူတပါး` | `သူတစ်ပါး` | Người khác |
| `တခါ` | `တစ်ခါ` | Một lần |
| `တချို့` | `တစ်ချို့` | Một số |
| `တခု` | `တစ်ခု` | Một cái |
| `တကြောင်း` | `တစ်ကြောင်း` | Một lý do |
| `တနည်း` | `တစ်နည်း` | Một cách |

### C. SỐ ĐẾM — LUÔN SỬA

| Lỗi | Sửa thành | Ghi chú |
|-----|----------|---------|
| `တထောင်` | `တစ်ထောင်` | Một nghìn |
| `တဆယ်` / `တဆဲ့` | `တစ်ဆယ့်` | Mười... |
| `တရာ` | `တစ်ရာ` | Một trăm |
| `၁ဝ` | `၁၀` | Số 10 |
| `၂ဝ` | `၂၀` | Số 20 |
| `၃ဝ` | `၃၀` | Số 30 |
| `ဝ.၅` | `၀.၅` | Số thập phân |

### D. SAI NGHĨA — SỬA THEO CONTEXT

Lỗi OCR khiến từ bị sai nghĩa hoàn toàn. Cần đọc context để xác nhận:

| Lỗi | Sửa thành | Context clue |
|-----|----------|-------------|
| `သမီးခင်ပွန်း` | `ဇနီးခင်ပွန်း` | Vợ chồng |
| `ထိုသမီး` | `ထိုသို့` | Như vậy |
| `တမင်္ဂလာ` | `တမင်တကာ` | Cố ý |
| `သစ္စာတော်` | `သစ္စာတရား` | Sự thật |
| `ဧကစေ့` | `ဧကစ္စေ` | Một số (Pāli: ekacce) |
| `ထွတ်မြောက်` | `ထွက်မြောက်` | Thoát khỏi (thiếu dấu) |

### E. NGHI NGỜ — GHI CHÚ, KHÔNG SỬA

Nếu không chắc chắn một chỗ có phải lỗi OCR không:
- **Không sửa**
- Ghi vào edited-notes với Loại = `Nghi ngờ`
- Mô tả lý do nghi ngờ

### F. FORMAT

- **Gộp dòng bị ngắt** — dòng không kết thúc bằng `။` hoặc `၊` là câu bị OCR cắt ngang → nối với dòng sau (cách 1 dấu cách). Dòng kết thúc bằng `။` hoặc `၊` → giữ nguyên, xuống dòng. Xem chi tiết [Mục IV - Gộp dòng](#1-gộp-dòng-bị-ngắt-line-merging). ⚠️ **Không cần ghi vào notes** (thay đổi thuần layout, không đổi ký tự).
- **Thêm dòng trống** giữa các đoạn văn khác nhau (khác chủ đề, khác ý). ⚠️ **Không cần ghi vào notes.**
- **Bold** các terms quan trọng theo ngữ cảnh với `**...**` (xem [Mục IV](#iv-định-dạng-markdown)). ⚠️ **Không cần ghi vào notes** (thêm `**` để định dạng, không sửa chữ).
- **Giữ `## PAGE X` markers** — không xóa, không thay đổi
- **Không thêm dòng ghi chú model** vào output (xem [Mục VI](#vi-danh-sách-cấm))

### G. KHÔNG TỰ Ý THÊM/BỚT NỘI DUNG GỐC

- Chỉ sửa chữ sai → chữ đúng
- Chỉ sắp xếp lại vị trí khi OCR làm sai bố cục
- Không "cải thiện" văn phong
- Không mở rộng từ viết tắt
- Không thêm dấu câu không có trong bản gốc
- **Ngoại lệ:** Nhiễu OCR (artifact) không phải "nội dung gốc" → được phép xóa (xem Rule H)

### H. NHIỄU OCR — LUÔN XÓA

Đây là ký tự rác do quá trình scan/OCR tạo ra, **không phải một phần của văn bản gốc**. Phải xóa bỏ, không giữ lại.

| Dạng nhiễu | Ví dụ | Cách xử lý |
|-----------|-------|----------|
| **Ký tự lạc** | `က`, `3` đứng một mình cuối trang | **XÓA** (số trang/chữ cái artifact) |
| **Dấu câu rác** | `!! -`, `"` đứng lẻ loi giữa các đoạn | **XÓA** |
| **Chữ Latin rác** | `KELI KITU KĶU VAU` cuối file | **XÓA** (footer/text ngoại lai không thuộc văn bản Myanmar) |
| **Ký hiệu lạ** | `$`, `%`, `@` không có ý nghĩa trong context | **XÓA** |
| **Dấu cách thừa** | Nhiều space liên tiếp, space đầu dòng | **XÓA** (chuẩn hóa về 1 space) |

---

## III. XỬ LÝ LỖI BỐ CỤC OCR (Text Displacement)

> Editor cần chủ động phát hiện và sắp xếp lại nội dung khi OCR làm chữ chạy sai vị trí.

### Các dạng lỗi bố cục

| Dạng | Mô tả | Dấu hiệu |
|------|-------|---------|
| **Nhiều cột** | Text cột A → B bị trộn | Đang đọc bỗng sang chủ đề khác, rồi quay lại |
| **Footnote lạc** | Chú thích cuối trang chui vào body | Số nhỏ giữa câu, đoạn ngắn khác giọng |
| **Số trang** | Số trang PDF lẫn vào văn bản | Số lẻ loi giữa 2 câu, không liên quan nội dung |
| **Header/Footer** | Tên chương/sách lặp trong text | Dòng ngắn lặp lại giữa các đoạn |
| **Marginal note** | Ghi chú bên lề bị nhét vào câu | Đoạn trong ngoặc đơn lạc chỗ, giọng khác |
| **Bảng biểu** | Nội dung bảng tuần tự hóa sai | Số liệu rời rạc không theo hàng/cột |

### Cách phát hiện

1. **Đứt mạch văn** — đang chủ đề A, bỗng 1-2 câu chủ đề B, rồi quay lại A
2. **Con số lạc lõng** — số đứng một mình giữa 2 câu văn (số trang artifact)
3. **Đoạn ngắn bất thường** — 1 dòng ngắn, khác giọng văn với xung quanh
4. **Lặp pattern** — cùng cụm từ ngắn xuất hiện nhiều lần (header/footer leaks)
5. **Dấu ngoặc không khớp** — mở ngoặc trang này, đóng ngoặc trang khác

### Cách xử lý

```
PHÁT HIỆN → XÁC ĐỊNH VỊ TRÍ ĐÚNG → DI CHUYỂN → GHI NOTES
```

1. **Phát hiện** block text sai vị trí
2. **Xác định vị trí đúng:**
   - Footnote → cuối trang hiện tại (sau `## PAGE X`)
   - Số trang → xóa (artifact) hoặc ghi chú
   - Text cột lạc → ghép vào đoạn có nội dung liên quan
   - Header/footer → xóa
   - Marginal note → đưa vào `[chú thích]` hoặc xuống cuối trang
3. **Di chuyển** text về đúng vị trí
4. **Ghi notes** — Loại = `Bố cục`, mô tả rõ block nào di chuyển từ đâu đến đâu

### Nguyên tắc vàng

- ✅ **Chủ động sắp xếp** — không để text sai vị trí vì "giữ nguyên bản"
- ✅ **Chủ động xóa nhiễu** — artifact không phải nội dung gốc, xóa không do dự
- ✅ **Luôn ghi notes** — mọi di chuyển và xóa nhiễu phải có trong edited-notes
- ✅ **Ưu tiên mạch văn** — text phải đọc xuôi, logic, sạch sẽ
- ❌ **Không tự xóa nội dung có nghĩa** — nghi ngờ → giữ lại + flag `Nghi ngờ`
- ❌ **Không thêm nội dung mới** — chỉ sắp xếp những gì đã có

---

## IV. ĐỊNH DẠNG MARKDOWN

### 1. Gộp Dòng Bị Ngắt (Line Merging)

OCR thường ngắt dòng theo layout PDF gốc, không theo câu → nhiều dòng bị cắt ngang giữa chừng. Cần gộp lại trước khi làm các bước khác.

**Quy tắc:**
- Dòng **KHÔNG** kết thúc bằng `။` hoặc `၊` → câu chưa hoàn chỉnh → **nối với dòng sau** (thêm 1 dấu cách)
- Dòng **KẾT THÚC** bằng `။` hoặc `၊` → câu hoàn chỉnh → **giữ nguyên, xuống dòng**
- Dòng trống (chỉ có newline) → giữ nguyên (ngăn cách đoạn)
- Dòng bắt đầu bằng `## PAGE` → giữ nguyên (page marker)

**Thứ tự thực hiện:** Gộp dòng → sửa lỗi OCR → xóa nhiễu → định dạng

### Headers

| Cấp | Markdown | Áp dụng cho |
|-----|----------|------------|
| `##` | `## TÊN CHƯƠNG` | Tên Nipāta: `ဧကကနိပါတ်`, `ဒုကနိပါတ်`... |
| `###` | `### TÊN PHẦN` | Tên Paṇṇāsaka: `ပထမပဏ္ဏာသက` |
| `####` | `#### TÊN VAGGA` | Tên Vagga: `၁-ရူပါဒိဝဂ်` |

> **Lưu ý cho Sổ Tay Mahavihara:** Nội dung sách này là các bài kệ tụng (ဝတ်ရွတ်စဉ်), không có cấu trúc Nipāta/Vagga rõ ràng. Hãy dùng `##` cho các đề mục chính và **căn cứ vào văn bản gốc** để chọn cấp header phù hợp. Giữ `## PAGE X` markers.

### Pali & Chú Thích

| Thành phần | Markdown | Ví dụ |
|-----------|----------|-------|
| Từ Pali cần nhấn | `**pali**` | `**ဘိက္ခဝေ** = ရဟန်းတို့` |
| Chú thích | `[chú thích]` | `[ဌ၊ ဋီဖွင့်]` |
| Số bài kinh | `**N။**` | `**၁။** ဧဝံ မေ သုတံ...` |
| Gạch nối nghĩa | `=` | `သီလံ = သီလကို` |
| Trích dẫn | `> trích dẫn` | `> ဤသို့ မှတ်ရာ၏။` |
| Câu kệ Pāḷi | `**cả câu**` | `**အင်္ဂေဟိ ဥတ္တရော တေန...**` |

### Đoạn văn

- **1 dòng trống** giữa các đoạn khác ý/khác chủ đề
- **1 dòng trống** trước số thứ tự mới (`၁။`, `၂။`...)
- **1 dòng trống** trước tên chương/phần mới
- Giữ nguyên `## PAGE X` markers

### Bảng tổng hợp quy tắc

| # | Quy tắc |
|---|---------|
| G1 | 1 dòng trống giữa các đoạn văn khác nhau |
| G2 | 1 dòng trống trước số thứ tự mới |
| G3 | `##` cho Nipāta |
| G4 | `###` cho Paṇṇāsaka |
| G5 | `####` cho Vagga |
| G6 | `**N။**` cho số bài kinh |
| G7 | `**pali**` cho từ Pali cần nhấn (trước dấu `=`) |
| G8 | `[chú thích]` cho ghi chú trong ngoặc |
| G9 | `=` cho gạch nối nghĩa (gloss) |
| G10 | Không `**` toàn bộ câu — chỉ bọc từ khóa |

---

## V. GHI CHÚ HIỆU ĐÍNH (EDITED NOTES)

**File:** `edited-notes/gemini-flash/{BATCH}-notes.md`

### Format bắt buộc

```markdown
# Edited Notes: {batch-name} (trang X-Y)

> Model: gemini-flash | Ngày: YYYY-MM-DD

## Thống kê
- Tổng số chỗ đã sửa: N
- Số lỗi bố cục đã sắp xếp: N
- Số chỗ nghi ngờ: N
- Pattern lỗi mới: N

## Danh sách chi tiết

| # | Trang | Lỗi (OCR) | Đã sửa thành | Loại |
|---|-------|-----------|-------------|------|
| 1 | X | `chữ_sai` | `chữ_đúng` | Pali |
| 2 | X | `chữ_sai` | `chữ_đúng` | Trợ từ |
| 3 | X | `chữ_sai` | `chữ_đúng` | Số đếm |
| 4 | X | (footnote lạc) | (đã tách cuối trang) | Bố cục |
```

### Quy tắc

1. **Cột "Đã sửa thành" PHẢI chứa text CHÍNH XÁC như trong output** → script re-mark tự động tìm được
2. **Ghi TẤT CẢ lỗi làm thay đổi ký tự/nội dung** — mỗi lỗi 1 dòng, không gộp. **Không ghi** các thay đổi thuần layout (gộp dòng, thêm dòng trống, bold `**`).
3. **Phân loại đúng:** `Pali`, `Trợ từ`, `Số đếm`, `Sai nghĩa`, `Dấu phụ`, `Bố cục`, `Nhiễu`, `Nghi ngờ`
4. **Không dùng `**` trong cột "Lỗi (OCR)"** (gây lỗi markdown table)
5. **Tiết kiệm token** — chỉ ghi lỗi thực sự (thay đổi ký tự). Formatting không cần notes.

---

## VI. DANH SÁCH CẤM

### Cấm trong output file
- ❌ Dòng ghi chú model: `Model OCR:`, `Hậu xử lý bởi...`, `Model: Gemini Flash...`
- ❌ `<mark>` tag — đánh dấu sẽ làm sau bằng script riêng
- ❌ Thêm dấu câu không có trong bản gốc
- ❌ Xóa `## PAGE X` markers

### Cấm trong xử lý
- ❌ Tự ý mở rộng từ viết tắt
- ❌ "Cải thiện" văn phong
- ❌ Thay đổi trật tự từ cho "mượt" hơn
- ❌ Xóa nội dung có nghĩa khi xử lý bố cục (nghi ngờ → giữ + flag)
- ❌ Dùng `edit` tool để sửa — luôn dùng `write` toàn bộ

### Cấm trong Phase 2
- ❌ Gọi tool tuần tự (1 tool rồi chờ kết quả rồi mới tool tiếp)

---

## VII. PHÂN BIỆT: SỬA vs CẢI THIỆN

| Loại | Ví dụ | Hành động |
|------|-------|----------|
| **Lỗi OCR** 🔧 | `ဧကစေ့` → `ဧကစ္စေ` | **SỬA** |
| **Lỗi OCR** 🔧 | `ထွတ်မြောက်` → `ထွက်မြောက်` | **SỬA** |
| **Lỗi bố cục** 🔧 | Footnote chui vào body | **SẮP XẾP LẠI** |
| **Lỗi bố cục** 🔧 | Text cột A → B bị trộn | **SẮP XẾP LẠI** |
| **Nhiễu OCR** 🗑️ | `!! -`, `က`, `3`, `KELI KITU...` | **XÓA** |
| **Nhiễu OCR** 🗑️ | Chữ Latin rác cuối file | **XÓA** |
| **Viết tắt** 📝 | `ရဟန်း` (thay vì `ရဟန်းတို့`) | **GIỮ NGUYÊN** |
| **Viết tắt** 📝 | `ဥပမာ` (thay vì `ဥပမာအားဖြင့်`) | **GIỮ NGUYÊN** |
| **Cải thiện** ❌ | Thêm `၊` / `။` không có trong gốc | **KHÔNG LÀM** |
| **Cải thiện** ❌ | Đổi trật tự từ cho "mượt" | **KHÔNG LÀM** |

---

## Tài Liệu Liên Quan

- [[01A-Dieu-Phoi-Editor-OCR]] — Architect: thiết lập cron + prompt editor
- [[OCR-Checklist]] — 90+ pattern lỗi OCR Myanmar (nguồn cho SQLite-vec DB)
- [[../huong-dan/Xu-Ly-Leaks]] — Xử lý header/footer leaks
- [[04-OCR-Pipeline]] — Quy trình OCR
