Fix every real lint finding and drop degenerate splice fragments

This commit is contained in:
2026-08-01 13:51:38 +07:00
parent 967b917001
commit 834d9e51b0
69 changed files with 10119 additions and 39 deletions
@@ -0,0 +1,185 @@
{
"note": "2D (stacked-fraction) formula regions, every one confirmed by rendering the page and reading it. bbox is the fraction bar itself; numerator and denominator sit above and below it.",
"verified_on": "2026-08-01",
"method": "residual-ink fraction_bar_candidate, then visual inspection of all 23 candidates",
"regions": [
{
"physical_page": 43,
"bar_bbox": [
133.44,
308.16,
222.72,
308.16
]
},
{
"physical_page": 92,
"bar_bbox": [
430.08,
603.36,
465.6,
603.36
]
},
{
"physical_page": 92,
"bar_bbox": [
362.88,
704.64,
386.4,
704.64
]
},
{
"physical_page": 92,
"bar_bbox": [
400.32,
704.64,
422.88,
704.64
]
},
{
"physical_page": 92,
"bar_bbox": [
456.96,
704.64,
480.0,
704.64
]
},
{
"physical_page": 92,
"bar_bbox": [
505.44,
704.64,
522.72,
704.64
]
},
{
"physical_page": 202,
"bar_bbox": [
371.52,
151.68,
489.6,
151.68
]
},
{
"physical_page": 325,
"bar_bbox": [
445.92,
562.08,
544.32,
562.56
]
},
{
"physical_page": 325,
"bar_bbox": [
439.68,
623.52,
560.16,
623.52
]
},
{
"physical_page": 349,
"bar_bbox": [
384.48,
336.0,
491.52,
336.48
]
},
{
"physical_page": 1042,
"bar_bbox": [
97.92,
492.0,
286.56,
492.0
]
},
{
"physical_page": 1043,
"bar_bbox": [
94.56,
536.16,
140.16,
536.16
]
},
{
"physical_page": 1043,
"bar_bbox": [
145.92,
536.16,
244.8,
536.16
]
},
{
"physical_page": 1132,
"bar_bbox": [
63.36,
498.72,
239.52,
498.72
]
},
{
"physical_page": 1402,
"bar_bbox": [
120.96,
711.84,
201.6,
711.84
]
},
{
"physical_page": 1402,
"bar_bbox": [
180.48,
770.4,
205.92,
770.4
]
},
{
"physical_page": 147,
"bar_bbox": [
307.9,
672.0,
428.5,
672.0
],
"source_prints_no_bar": true,
"note": "ADENOSIN infusion-rate formula. The source page prints three plain lines with no fraction bar at all, so no geometric detector can find it — confirmed by rendering the region and reading it. Left in prose it reads as a multiplication chain. Quarantined on the strength of the reading, and flagged for human confirmation of the intended division."
}
],
"rejected": [
{
"physical_page": 4,
"reason": "decorative underlines on the Ministry decision page"
},
{
"physical_page": 63,
"reason": "ruled box around a treatment-protocol paragraph"
},
{
"physical_page": 845,
"reason": "table header cell border"
},
{
"physical_page": 878,
"reason": "table header cell border"
},
{
"physical_page": 1667,
"reason": "rule above the colophon on the last page"
}
],
"recall_limit": "The fraction-bar signal cannot find a fraction the source never typeset. ADENOSIN (physical page 147) is one confirmed case, found only because a prose-leak gate matched its text. The true number of bar-less formulas in the book is UNMEASURED."
}
@@ -0,0 +1,671 @@
{
"note": "Text that exists in the PDF only as vector outlines. No extractor returns it (PyMuPDF, pdfplumber and opendataloader-pdf all omit it). Every 'text' value below is a transcription read off the rendered page, not extracted data.",
"transcribed_on": "2026-08-01",
"method": "ingestion.extract.detect_outlined_text located the runs; each run was rendered at 210-300 dpi and read directly",
"confidence": "Full-line runs are read with high confidence. Single-glyph runs are Vietnamese diacritic characters dropped out of an otherwise-extracted line; the glyph identity is legible but these should still be spot-checked by a human before the corpus is treated as complete.",
"runs": [
{
"physical_page": 714,
"bbox": [
470.32,
37.64,
521.85,
44.57
],
"path_items": 337,
"text": "Gatifloxacin",
"extracted_line_it_belongs_to": null,
"single_glyph": false
},
{
"physical_page": 714,
"bbox": [
35.31,
75.76,
286.72,
84.41
],
"path_items": 1638,
"text": "Nghiên cứu trên động vật, gatifloxacin gây ngộ độc cho thai.",
"extracted_line_it_belongs_to": null,
"single_glyph": false
},
{
"physical_page": 714,
"bbox": [
35.77,
87.91,
287.05,
96.56
],
"path_items": 1714,
"text": "Gatifloxacin chỉ sử dụng cho phụ nữ có thai khi lợi ích vượt trội so",
"extracted_line_it_belongs_to": null,
"single_glyph": false
},
{
"physical_page": 714,
"bbox": [
299.67,
127.07,
551.33,
137.58
],
"path_items": 1765,
"text": "Thuốc kháng acid (antacid): Gatifloxacin bị giảm hấp thu khi sử",
"extracted_line_it_belongs_to": "Do chưa biết thuốc có phân bố vào sữa mẹ khi dùng trên người hay ",
"single_glyph": false
},
{
"physical_page": 714,
"bbox": [
35.51,
139.65,
287.22,
150.17
],
"path_items": 1831,
"text": "không, cần thận trọng khi sử dụng gatifloxacin cho phụ nữ đang",
"extracted_line_it_belongs_to": null,
"single_glyph": false
},
{
"physical_page": 714,
"bbox": [
299.71,
151.2,
550.66,
161.71
],
"path_items": 1787,
"text": "cần dùng gatifloxacin ít nhất 4 giờ trước khi dùng các antacid này.",
"extracted_line_it_belongs_to": null,
"single_glyph": false
},
{
"physical_page": 714,
"bbox": [
299.44,
177.2,
455.19,
185.84
],
"path_items": 1126,
"text": "học có ý nghĩa lâm sàng với gatifloxacin.",
"extracted_line_it_belongs_to": null,
"single_glyph": false
},
{
"physical_page": 714,
"bbox": [
299.66,
223.59,
397.93,
234.1
],
"path_items": 792,
"text": "giảm hấp thu gatifloxacin.",
"extracted_line_it_belongs_to": "Mắt: Chứng sưng viêm mi mắt, xuất huyết kết mạc, rát kết mạc, ",
"single_glyph": false
},
{
"physical_page": 714,
"bbox": [
299.66,
247.72,
551.32,
258.23
],
"path_items": 1731,
"text": "giữa warfarin và gatifloxacin, nhưng do một số quinolon có khả",
"extracted_line_it_belongs_to": "khô mắt, phù, rát, viêm giác mạc, giảm thị lực, kích ứng kết mạc.",
"single_glyph": false
},
{
"physical_page": 714,
"bbox": [
299.71,
321.98,
363.88,
330.62
],
"path_items": 480,
"text": "của gatifloxacin.",
"extracted_line_it_belongs_to": "Thần kinh: Căng thẳng, kích động, lo lắng, mất ngủ, hoa mắt, giấc ",
"single_glyph": false
},
{
"physical_page": 714,
"bbox": [
35.78,
441.28,
287.38,
451.79
],
"path_items": 1778,
"text": "Cần ngừng gatifloxacin trong các trường hợp: Bắt đầu có các biểu",
"extracted_line_it_belongs_to": null,
"single_glyph": false
},
{
"physical_page": 714,
"bbox": [
299.71,
452.82,
461.52,
463.34
],
"path_items": 1115,
"text": "Gatifloxacin dùng với các thuốc làm thay đ",
"extracted_line_it_belongs_to": "hiện ban da hoặc bất kỳ dấu hiệu nào của phản ứng quá mẫn, có ",
"single_glyph": false
},
{
"physical_page": 714,
"bbox": [
461.95,
452.82,
466.05,
461.42
],
"path_items": 43,
"text": "ổ",
"extracted_line_it_belongs_to": "i nồng độ glucose máu ",
"single_glyph": true
},
{
"physical_page": 714,
"bbox": [
35.72,
503.9,
81.99,
512.55
],
"path_items": 373,
"text": "gatifloxacin.",
"extracted_line_it_belongs_to": null,
"single_glyph": false
},
{
"physical_page": 714,
"bbox": [
313.73,
506.23,
317.83,
514.82
],
"path_items": 43,
"text": "ổ",
"extracted_line_it_belongs_to": "Độ n định: Dung dịch sau khi pha loãng trong dịch tương hợp n ",
"single_glyph": true
},
{
"physical_page": 714,
"bbox": [
542.15,
506.23,
546.25,
514.82
],
"path_items": 43,
"text": "ổ",
"extracted_line_it_belongs_to": "Độ n định: Dung dịch sau khi pha loãng trong dịch tương hợp n ",
"single_glyph": true
},
{
"physical_page": 714,
"bbox": [
450.53,
520.35,
455.28,
526.89
],
"path_items": 45,
"text": "ở",
"extracted_line_it_belongs_to": "định trong vòng 14 ngày nếu bảo quản nhiệt độ 20 - 26 oC hoặc ",
"single_glyph": true
},
{
"physical_page": 714,
"bbox": [
299.71,
532.42,
304.45,
538.95
],
"path_items": 45,
"text": "ở",
"extracted_line_it_belongs_to": " nhiệt độ 2 - 8 oC. Dung dịch pha loãng này (trừ pha trong natri ",
"single_glyph": true
},
{
"physical_page": 714,
"bbox": [
385.77,
542.42,
389.87,
551.01
],
"path_items": 43,
"text": "ổ",
"extracted_line_it_belongs_to": "bicarbonat 5%) có thể n định tới 6 tháng nếu bảo quản ",
"single_glyph": true
},
{
"physical_page": 714,
"bbox": [
36.09,
543.49,
287.58,
554.0
],
"path_items": 1809,
"text": "Ghi chú: Đối với gatifloxacin dạng viên và dạng tiêm, nhà sản xuất",
"extracted_line_it_belongs_to": null,
"single_glyph": false
},
{
"physical_page": 714,
"bbox": [
513.35,
544.48,
518.1,
551.01
],
"path_items": 45,
"text": "ở",
"extracted_line_it_belongs_to": "bicarbonat 5%) có thể n định tới 6 tháng nếu bảo quản ",
"single_glyph": true
},
{
"physical_page": 714,
"bbox": [
522.12,
554.48,
526.22,
563.08
],
"path_items": 43,
"text": "ổ",
"extracted_line_it_belongs_to": "-25 đến -10 oC, sau khi đưa ra khỏi tủ lạnh sâu, tiếp tục n định ",
"single_glyph": true
},
{
"physical_page": 714,
"bbox": [
426.75,
568.61,
431.5,
575.14
],
"path_items": 45,
"text": "ở",
"extracted_line_it_belongs_to": "trong vòng 14 ngày nếu bảo quản nhiệt độ 20 - 26 oC hoặc nhiệt ",
"single_glyph": true
},
{
"physical_page": 714,
"bbox": [
525.62,
568.61,
530.37,
575.14
],
"path_items": 45,
"text": "ở",
"extracted_line_it_belongs_to": "trong vòng 14 ngày nếu bảo quản nhiệt độ 20 - 26 oC hoặc nhiệt ",
"single_glyph": true
},
{
"physical_page": 714,
"bbox": [
299.47,
619.81,
551.17,
630.32
],
"path_items": 1692,
"text": "Vì có rất ít các thông tin về tương ky của gatifloxacin, nên không",
"extracted_line_it_belongs_to": "Tiêm truyền tĩnh mạch dưới dạng dung dịch 2 mg/ml trong 60 phút.",
"single_glyph": false
},
{
"physical_page": 714,
"bbox": [
105.83,
628.89,
109.93,
637.14
],
"path_items": 39,
"text": "ỗ",
"extracted_line_it_belongs_to": "Thuốc dùng tại ch : Chỉ dùng nhỏ vào mắt bị viêm; tránh để tiếp ",
"single_glyph": true
},
{
"physical_page": 714,
"bbox": [
299.48,
631.87,
551.03,
642.39
],
"path_items": 1739,
"text": "thêm bất kỳ một thuốc nào khác vào dịch truyền gatifloxacin hoặc",
"extracted_line_it_belongs_to": "Thuốc dùng tại ch : Chỉ dùng nhỏ vào mắt bị viêm; tránh để tiếp ",
"single_glyph": false
},
{
"physical_page": 714,
"bbox": [
391.91,
685.48,
396.01,
693.72
],
"path_items": 39,
"text": "ỗ",
"extracted_line_it_belongs_to": "triệu chứng và điều trị h trợ, bao gồm: Gây nôn và rửa dạ dày để ",
"single_glyph": true
},
{
"physical_page": 714,
"bbox": [
223.28,
713.6,
227.39,
722.19
],
"path_items": 43,
"text": "ổ",
"extracted_line_it_belongs_to": "Viêm màng tiếp hợp nhiễm khuẩn trẻ em ≥ 1 tu i và người lớn:",
"single_glyph": true
},
{
"physical_page": 714,
"bbox": [
167.4,
715.66,
172.14,
722.19
],
"path_items": 45,
"text": "ở",
"extracted_line_it_belongs_to": "Viêm màng tiếp hợp nhiễm khuẩn trẻ em ≥ 1 tu i và người lớn:",
"single_glyph": true
},
{
"physical_page": 714,
"bbox": [
299.72,
786.64,
551.3,
797.16
],
"path_items": 1687,
"text": "Gatifloxacin thuộc Danh mục nguyên liệu và thuốc thành phẩm",
"extracted_line_it_belongs_to": null,
"single_glyph": false
},
{
"physical_page": 736,
"bbox": [
448.56,
88.17,
453.3,
94.7
],
"path_items": 45,
"text": "ở",
"extracted_line_it_belongs_to": "không màu, đóng kín tránh ánh sáng điều kiện lạnh 2 - 8 oC; ",
"single_glyph": true
},
{
"physical_page": 736,
"bbox": [
266.53,
98.19,
270.63,
106.79
],
"path_items": 43,
"text": "ổ",
"extracted_line_it_belongs_to": "dưới da hoặc tiêm bắp. Đối với người lớn và trẻ em từ 3 tu i tr ",
"single_glyph": true
},
{
"physical_page": 736,
"bbox": [
282.68,
100.26,
287.43,
106.79
],
"path_items": 45,
"text": "ở",
"extracted_line_it_belongs_to": "dưới da hoặc tiêm bắp. Đối với người lớn và trẻ em từ 3 tu i tr ",
"single_glyph": true
},
{
"physical_page": 736,
"bbox": [
129.96,
122.5,
209.16,
133.01
],
"path_items": 580,
"text": "nh tổn thương dây th",
"extracted_line_it_belongs_to": "vào vùng cơ mông để trá",
"single_glyph": false
},
{
"physical_page": 736,
"bbox": [
172.81,
221.76,
177.56,
228.3
],
"path_items": 45,
"text": "ở",
"extracted_line_it_belongs_to": "Liều thường dùng của GMDCUV người lớn và trẻ em để dự ",
"single_glyph": true
},
{
"physical_page": 736,
"bbox": [
91.42,
280.45,
95.52,
289.05
],
"path_items": 43,
"text": "ổ",
"extracted_line_it_belongs_to": "tiêm các liều b sung với các khoảng cách là 4 tuần.",
"single_glyph": true
},
{
"physical_page": 736,
"bbox": [
157.23,
332.32,
161.98,
338.85
],
"path_items": 45,
"text": "ở",
"extracted_line_it_belongs_to": "lại. Liều thông thường HTCUV người lớn và trẻ em để dự phòng ",
"single_glyph": true
},
{
"physical_page": 736,
"bbox": [
192.28,
369.96,
197.03,
376.5
],
"path_items": 45,
"text": "ở",
"extracted_line_it_belongs_to": "chậm trễ trong bắt đầu tiêm phòng hoặc người có thể trọng quá ",
"single_glyph": true
},
{
"physical_page": 736,
"bbox": [
399.06,
424.38,
403.8,
430.91
],
"path_items": 45,
"text": "ở",
"extracted_line_it_belongs_to": "huyết thanh của người trư ng thành khỏe mạnh đã được tạo miễn ",
"single_glyph": true
},
{
"physical_page": 736,
"bbox": [
187.41,
513.01,
192.16,
519.54
],
"path_items": 45,
"text": "ở",
"extracted_line_it_belongs_to": "GMDCUV hoặc HTCUV không ảnh hư ng tới đáp ứng miễn dịch ",
"single_glyph": true
},
{
"physical_page": 736,
"bbox": [
280.17,
625.95,
284.91,
632.48
],
"path_items": 45,
"text": "ở",
"extracted_line_it_belongs_to": "miễn dịch đối với một vài loại vắc xin virus sống (vắc xin virus s i ",
"single_glyph": true
},
{
"physical_page": 736,
"bbox": [
282.99,
699.18,
287.09,
707.78
],
"path_items": 43,
"text": "ổ",
"extracted_line_it_belongs_to": "dịch hoặc huyết thanh ngựa thì nên dùng thêm một liều vắc xin b ",
"single_glyph": true
},
{
"physical_page": 736,
"bbox": [
419.76,
726.48,
424.51,
733.01
],
"path_items": 45,
"text": "ở",
"extracted_line_it_belongs_to": "phòng thí nghiệm và bị ảnh hư ng b i phương pháp xét nghiệm. ",
"single_glyph": true
},
{
"physical_page": 736,
"bbox": [
442.01,
726.48,
446.75,
733.01
],
"path_items": 45,
"text": "ở",
"extracted_line_it_belongs_to": "phòng thí nghiệm và bị ảnh hư ng b i phương pháp xét nghiệm. ",
"single_glyph": true
},
{
"physical_page": 736,
"bbox": [
305.51,
737.0,
309.61,
745.6
],
"path_items": 43,
"text": "ổ",
"extracted_line_it_belongs_to": "Do các chế phẩm có chứa globulin miễn dịch không có biểu hiện ",
"single_glyph": true
},
{
"physical_page": 736,
"bbox": [
62.37,
751.45,
67.12,
757.98
],
"path_items": 45,
"text": "ở",
"extracted_line_it_belongs_to": "ảnh hư ng tới các đáp ứng miễn dịch của vắc xin uống virus bại ",
"single_glyph": true
},
{
"physical_page": 1373,
"bbox": [
43.81,
98.58,
295.66,
109.1
],
"path_items": 1458,
"text": "Nếu phối hợp với flutamid ở giai đoạn T2b - T4 (B2 - C), điều trị",
"extracted_line_it_belongs_to": null,
"single_glyph": false
},
{
"physical_page": 1444,
"bbox": [
35.72,
136.22,
287.35,
146.74
],
"path_items": 1731,
"text": "Trimovax (Sanofi Pasteur): Một liều vắc xin chứa virus sống giảm",
"extracted_line_it_belongs_to": null,
"single_glyph": false
},
{
"physical_page": 1445,
"bbox": [
308.28,
114.39,
559.87,
123.03
],
"path_items": 1440,
"text": "(Typhoid, inactivated, whole cell), J07AP03 (Typhoid, purified",
"extracted_line_it_belongs_to": "thể xảy ra 5 ngày sau khi tiêm: Sốt (có thể dự phòng bằng các loại ",
"single_glyph": false
},
{
"physical_page": 1445,
"bbox": [
115.46,
646.46,
208.24,
655.11
],
"path_items": 660,
"text": "Haemophilus influenzae",
"extracted_line_it_belongs_to": "khác như vắc xin ",
"single_glyph": false
}
]
}