117 lines
6.2 KiB
Markdown
117 lines
6.2 KiB
Markdown
# Kế hoạch phủ toàn bộ nội dung PDF (text + bảng + công thức + outlier)
|
|
|
|
**Trạng thái**: kế hoạch đang thực thi, lập 2026-07-31. Các ô ghi `[chờ đo]`
|
|
là số liệu chưa có tại thời điểm viết — không được trích dẫn cho đến khi
|
|
điền bằng kết quả chạy thật.
|
|
|
|
## Mục tiêu, phát biểu chính xác
|
|
|
|
Có hai mục tiêu thường bị gộp làm một. Kế hoạch này chỉ nhận mục tiêu A cho
|
|
cuối ngày, và phát biểu rõ B là việc dài hơn.
|
|
|
|
| | Mục tiêu | Nhận cho cuối ngày? |
|
|
|---|---|---|
|
|
| **A** | **Phủ toàn bộ, không mất âm thầm**: mọi ký tự trong 1668 trang đều rơi vào đúng một rổ đầu ra hoặc vào rổ `unassigned` đếm được; mọi đối tượng không đáng tin đều bị gắn cờ tường minh; provenance giữ nguyên | **Có** |
|
|
| **B** | **Đúng 100% đã chứng minh**: mọi bảng và công thức đã đối chiếu ground truth | **Không** — cần đối chiếu thủ công toàn bộ, là công người, không phải công máy |
|
|
|
|
Tuyên bố "parse được toàn bộ" chỉ hợp lệ theo nghĩa A. Bất kỳ báo cáo nào
|
|
cũng phải nói rõ đang nói về A hay B.
|
|
|
|
## Vì sao không xây một bộ reconstruct tổng quát
|
|
|
|
Chưa biết trong sách có bao nhiêu bảng, bao nhiêu dạng cấu trúc, bao nhiêu
|
|
trang continuation. Xây một bộ tổng quát trước khi biết phân bố dạng là đầu
|
|
tư mù. Thứ tự bắt buộc: **kiểm kê → phân loại dạng → chọn đường xử lý theo
|
|
từng dạng → mới code**.
|
|
|
|
## Giai đoạn
|
|
|
|
### A. Kiểm kê toàn corpus (đang chạy)
|
|
|
|
Script tạm `ingestion/scratch/inventory_tables_formulas.py`, scope toàn bộ
|
|
1668 trang, xuất provenance từng đối tượng để soi lại được.
|
|
|
|
| Đại lượng | Kết quả |
|
|
|---|---|
|
|
| Số bảng pdfplumber tìm được / số trang có bảng | `[chờ đo]` |
|
|
| Phân bố số cột | `[chờ đo]` |
|
|
| Ứng viên continuation (bảng ở đầu trang/cột, không header) | `[chờ đo]` |
|
|
| Lưới toàn số ≥4 cột (ứng viên 2D lookup, catalog item 7) | `[chờ đo]` |
|
|
| Ứng viên công thức: fraction_bar / PUA / small_font_numeric | `[chờ đo]` |
|
|
|
|
Kiểm kê này **cố tình thiên về recall**: bắt thừa còn hơn bỏ sót; độ chính
|
|
xác đo sau bằng kiểm tra trực quan.
|
|
|
|
### B. Sổ cái phủ ký tự — đây là eval chứng minh "trích xuất được"
|
|
|
|
Với mỗi trang trong 1668 trang, đối chiếu:
|
|
|
|
```
|
|
chars_trên_trang_gốc == chars_vào_section_text
|
|
+ chars_vào_ô_bảng
|
|
+ chars_vào_vùng_công_thức
|
|
+ chars_vào_front_matter / phụ lục
|
|
+ chars_unassigned
|
|
```
|
|
|
|
`unassigned` phải ra **một con số cụ thể kèm danh sách trang/bbox**, không
|
|
phải một lời khẳng định. Đây là điểm khác biệt so với mọi eval trước đó
|
|
trong dự án: recall/precision hiện tại chỉ đo **phát hiện ranh giới chuyên
|
|
luận**, không đo nội dung; sổ cái này đo nội dung ở mức ký tự, whole-document,
|
|
không phải mẫu.
|
|
|
|
Giới hạn phải nói rõ: sổ cái chứng minh **không mất**, không chứng minh
|
|
**đúng thứ tự** hay **đúng ngữ nghĩa**. Thứ tự đã có kiểm tra riêng
|
|
(`scan_reading_order`, `scan_glyph_order`); ngữ nghĩa thuộc mục tiêu B.
|
|
|
|
### C. Định tuyến theo dạng, mỗi dạng một đường
|
|
|
|
| Dạng | Xử lý | Metadata bắt buộc |
|
|
|---|---|---|
|
|
| Bảng có kẻ khung, header dạng chữ | Trích ô thật | `table_id`, `row`, `col`, `page`, `bbox` |
|
|
| Bảng ngắt trang/cột (catalog item 5-6) | Gắn lại header gốc vào phần tiếp | thêm `continues_from` |
|
|
| Lưới toàn số 2D (item 7) | **Không** chunk thành text | `do_not_cite: true` + giữ công thức đi kèm |
|
|
| Công thức 1D (mũ inline) | Giữ nguyên text | `formula_kind: "1d"` |
|
|
| Công thức 2D (có fraction bar) | Gắn cờ, giữ bbox + ảnh crop | `needs_review: true` |
|
|
| Ký tự PUA (item: mũi tên lỗi) | Bảng thay thế tường minh | `pua_substituted` |
|
|
|
|
Mở/đóng theo SOLID: thêm một dạng mới = thêm một entry định tuyến, không
|
|
sửa code đang chạy.
|
|
|
|
### D. Vùng ngoài chuyên luận
|
|
|
|
General chapters (tr. 37-98) và phụ lục (tr. 1497-1528) hiện **nằm ngoài
|
|
phạm vi hoàn toàn** — pipeline chỉ sinh 682 chuyên luận. Hai vùng này phải
|
|
hoặc vào sổ cái phủ, hoặc bị loại trừ tường minh kèm con số ký tự bị loại.
|
|
Không được im lặng bỏ qua.
|
|
|
|
### E. Artifact bằng chứng
|
|
|
|
Mỗi đối tượng bị gắn cờ sinh một ảnh crop theo bbox đặt cạnh text trích ra,
|
|
để mọi tuyên bố eval soi tận mắt được. Tự đọc ảnh để kiểm chứng, không đẩy
|
|
việc kiểm tra sang người dùng.
|
|
|
|
## Số đo cần báo riêng, không gộp
|
|
|
|
Theo yêu cầu tránh gộp chỉ số che lấp điểm yếu:
|
|
|
|
- **detection recall** của detector trên golden set — bắt được bao nhiêu %
|
|
đối tượng thật
|
|
- **false positive** — bắt nhầm bao nhiêu
|
|
- **số đối tượng chưa phân loại** — bao nhiêu cái detector không biết xếp vào
|
|
đâu
|
|
- **structural accuracy** — bảng tái tạo đúng hàng/cột bao nhiêu %
|
|
- **semantic fidelity** — nội dung ô đúng bao nhiêu %
|
|
|
|
Detector dựa trên bbox là **heuristic**: nó tìm ứng viên, không chứng minh
|
|
đã bắt hết mọi phân số, chỉ số, căn, ma trận hay lưới 2D. Mọi báo cáo phải
|
|
đi kèm ba số đầu, không được nói suông "detector hoạt động tốt".
|
|
|
|
## Nợ kỹ thuật đã biết, chưa xử lý
|
|
|
|
- Ground truth từ Mục lục tra cứu **chưa được làm sạch**: chứa entry tham
|
|
chiếu chéo lặp (ví dụ `"- CoA reductase, 285"` xuất hiện hơn 10 lần trong
|
|
danh sách unmatched). Mẫu số 1064 hiện tại vì thế không đáng tin để chốt;
|
|
ADR 0003 dùng mẫu số 725 nên hai lần đo **không so sánh trực tiếp được**.
|
|
- Nội dung text chuyên luận chưa từng được đo độ chính xác so với nguồn.
|