Skip to content

Commit 8f02e4e

Browse files
chrisryugjclaude
andcommitted
release: 4.22.13
- 4.22.12 뒤 다섯 라운드를 묶어 낸다: 꼬리말 영역 0 인 구역의 아래쪽 쪽 번호(31), 칸 줄을 쪽에서 갈라 저장한 표의 넘침 여유 해제(32), 첫 줄도 안 드는 갈라 저장 행은 다음 쪽(33), 칸 안 빈 문단의 표에 밀린 줄(34), 쪽을 넘는 칸 안 떠 있는 표(35). 모두 렌더·조판 쪽 - 4.22.12 와 같은 채점기·코퍼스로 잰 결과(suite 문서별 비교 r42212 → r42213, 하락 0): score·PDF 글·PDF 표·별표·기타 포맷· 왕복·생성·OCR·opendataloader-bench 네 모드가 문서별로 같다(ODL 기본값 0.96367). 렌더(한컴 PDF 짝) 글 조각 85,968/90,428 → 86,051/90,433(라운드마다 내린 문서 0, 짝 문서 전체 목록 대조)·그림 3,869 → 3,872/3,976·쪽 수 1,413 → 1,421/1,431(새로 어긋난 문서 0). 조판(12개 폴더 저장본 대조) 본문 76,729·칸 205,015·두 줄+ 24,940 그대로 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q7EF2EFJZMeH4dk7Rm2f15
1 parent d7a602c commit 8f02e4e

10 files changed

Lines changed: 84 additions & 36 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [4.22.13] - 2026-10-18
11+
1012
### Fixed
1113

14+
- 꼬리말 영역이 0 인 구역의 아래쪽 쪽 번호는 아래 여백 가운데 위(기준선 = 쪽 바닥 − 아래 여백/2 − 2.43pt)에 놓는다(렌더). 종전엔 꼬리말 영역이 있을 때처럼 아래 여백 바로 위(쪽 바닥 − 아래 여백 − 2.25pt)에 놓아, 아래 여백 2,834 서식의 쪽 번호가 한컴 PDF 보다 14pt 위에 찍혔다.
1215
- 칸 줄이 쪽에서 갈라 저장된(칸 안 줄 vertpos 가 되돌아간) 표는 아래 여백으로 넘쳐 한 쪽에 남기지 않는다(렌더). 종전엔 표 전체가 아래 여백 안에서 끝나면 가르지 않아, 한컴이 두 쪽에 걸쳐 저장한 서식 표를 한 쪽에 그리고 갈린 칸 줄을 쪽 밖으로 밀어냈다.
1316
- 쪽에서 갈라 저장된 행(칸 줄이 되돌아감)의 첫 조각은 첫 줄도 이 쪽 남은 자리에 안 들면 다음 쪽 맨 위에서 시작한다(렌더 — 칸 줄 나눔과 같은 판정). 종전엔 저장된 갈림 자리를 그대로 따라 첫 조각을 쪽 바닥(남은 858) 아래에 그렸다.
1417
- 칸 안 빈 문단의 위아래 배치 표도 줄이 그 표에 밀려 저장됐으면(줄 = 칸 안 앞 문단 끝 + 바깥 여백 + 표 높이) 줄 위(앞 문단 끝)에 그린다(렌더 — 본문 문단과 같은 판정). 종전엔 칸 안에서는 늘 줄 자리에 그려, 칸 안 표가 제 높이만큼(196~234pt) 아래로 밀렸다.
1518
- 갈라 저장되지 않은 칸의 줄에 앵커한 떠 있는 표가 쪽을 넘으면 칸 틀을 그 표가 끝나는 쪽까지 잇고 칸 안 표를 다음 쪽에 이어 그린다(렌더). 칸 높이는 떠 있는 표도 행으로 잰 높이까지 센다(쪽을 넘는 표의 저장 `sz` 는 첫 쪽 조각뿐). 종전엔 칸 안 표를 첫 쪽에 다 그려 쪽 밖 행이 잘렸다 — 26행 안쪽 표가 든 세 쪽 서식이 한 쪽.
16-
- 꼬리말 영역이 0 인 구역의 아래쪽 쪽 번호는 아래 여백 가운데 위(기준선 = 쪽 바닥 − 아래 여백/2 − 2.43pt)에 놓는다(렌더). 종전엔 꼬리말 영역이 있을 때처럼 아래 여백 바로 위(쪽 바닥 − 아래 여백 − 2.25pt)에 놓아, 아래 여백 2,834 서식의 쪽 번호가 한컴 PDF 보다 14pt 위에 찍혔다.
19+
20+
### Validation
21+
22+
- 4.22.12 와 같은 채점기·코퍼스로 다시 쟀다(`node bench/suite.mjs cmp r42212 r42213`). 다섯 라운드 모두 렌더·조판 쪽만 바꿔 score·PDF 글·PDF 표·별표·기타 포맷·왕복·생성·OCR·opendataloader-bench 네 모드가 문서별로 4.22.12 와 같다(ODL 기본값 0.96367).
23+
- 렌더(한컴 PDF 짝): 글 조각 1.5pt 안 85,968/90,428 → 86,051/90,433(라운드마다 내린 문서 0 — 짝 문서 전체 목록 대조), 그림 2pt 안 3,869 → 3,872/3,976, 쪽 수 1,413 → 1,421/1,431(새로 어긋난 문서 0).
24+
- 조판(12개 폴더 저장본 대조) 본문 첫 줄 위치 76,729/78,376·본문+개체 16,336·표 칸 205,015/205,307·칸+개체 6,188·두 줄+ 24,940/25,187·줄 수 306,681 그대로.
1725

1826
## [4.22.12] - 2026-10-18
1927

‎README-EN.md‎

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ Extract Markdown for format-preserving patches with `--keep-layout-tables`. Unsu
100100

101101
## Validation
102102

103-
**4.22.12 verification · 2026-10-18**. Results use fixed corpora and reference criteria.
103+
**4.22.13 verification · 2026-10-18**. Results use fixed corpora and reference criteria.
104104

105105
| Target | Population | Result |
106106
| --- | --- | --- |
@@ -116,18 +116,19 @@ Extract Markdown for format-preserving patches with `--keep-layout-tables`. Unsu
116116

117117
Table structure, cell content and visual fidelity are separate metrics. The nested-table 100% applies only to these 101 tables, not all PDF parsing or page layout. See [benchmark details](docs/benchmarks-en.md) for scope, exclusions and the per-document comparison of every bench.
118118

119-
**4.22.12 improvement verification (2026-10-18)**: re-measured against 4.22.11 with the same scorer and corpora, parser output (all four opendataloader-bench modes, PDF text and tables, annexes, OCR, other formats, round trips and generation) is unchanged per document and the reflow saved-file metrics are unchanged, while rendered text spans within 1.5pt of Hancom's PDF rose **85,837/90,418→85,968/90,428** and images **3,866→3,869/3,976**. Text boxes are now placed at their current size (curSz), page-break paragraphs saved pushed down by their own table start a new page, tables with no row matching the table width use the longest path for column boundaries, and text-box content no longer collapses in documents with page-absolute line caches, text boxes without a text-area width, or old Hangul jamo. [Details](docs/benchmarks-en.md)
119+
**4.22.13 improvement verification (2026-10-18)**: re-measured against 4.22.12 with the same scorer and corpora, parser output (all four opendataloader-bench modes, PDF text and tables, annexes, OCR, other formats, round trips and generation) is unchanged per document and the reflow saved-file metrics are unchanged, while rendered text spans within 1.5pt of Hancom's PDF rose **85,968/90,428→86,051/90,433**, images **3,869→3,872/3,976** and page counts **1,413→1,421/1,431**. Fixed: page numbers in sections without a footer area, page breaks of tables and rows that Hancom saved split across pages, tables in cells that push their anchor line down, and tables in cells that run past the page. [Details](docs/benchmarks-en.md)
120120

121121
Merged corner cells are retained within the existing logical grid during empty-row folding. Six number glyphs in the reproduced PDF are now restored; HTML rule rendering and unregistered font glyphs remain [documented limitations](docs/parsing-loss-reproductions.md) (Korean).
122122

123-
The external **opendataloader-bench, 200 documents** was verified on the same corpus with the 4.22.12 release candidate: overall **0.964** with defaults, **0.939** with OCR off. [Options and reproduction](docs/benchmarks-en.md#pdf--markdown--opendataloader-bench)
123+
The external **opendataloader-bench, 200 documents** was verified on the same corpus with the 4.22.13 release candidate: overall **0.964** with defaults, **0.939** with OCR off. [Options and reproduction](docs/benchmarks-en.md#pdf--markdown--opendataloader-bench)
124124

125125
## Recent updates
126126

127-
Latest release: **[4.22.12](https://github.com/chrisryugj/kordoc/releases/tag/v4.22.12)** · 2026-10-18
127+
Latest release: **[4.22.13](https://github.com/chrisryugj/kordoc/releases/tag/v4.22.13)** · 2026-10-18
128128

129129
| Version | Highlights |
130130
| --- | --- |
131+
| 4.22.13 | Page-break and in-cell table rendering fixes — page numbers without a footer area, no bottom-margin slack for tables with cells saved split, saved-split rows whose first line does not fit start on the next page, lines pushed by tables in cells, in-cell tables that run past the page (rendered text spans 85,968 → 86,051, images 3,869 → 3,872, page counts 1,413 → 1,421) — parser output and reflow metrics unchanged from 4.22.12 |
131132
| 4.22.12 | Text-box rendering fixes — current size (curSz), re-layout of page-absolute caches, text boxes without a text-area width, old Hangul jamo widths; page-break paragraphs pushed by their own table; longest-path column boundaries for tables with no row matching the table width (rendered text spans 85,837 → 85,968, images 3,866 → 3,869) — parser output and reflow metrics unchanged from 4.22.11 |
132133
| 4.22.11 | Rendering fixes — where tables inside split cells restart, float bottoms in the last part of split rows, multi-row cell content heights and the alignment of the last part of split centred cells (rendered text spans 85,496 → 85,837); fixes the 4.21.31 regression that pushed pictures in empty paragraphs off the page — parser output and reflow unchanged from 4.22.10 |
133134
| 4.22.10 | MCP `parse_document` OCR model arguments (#165); rendering fixes for tables — column boundaries of rows with different cell-width sums, merged-cell row growth, cells saved split after their first line, first rows at the page bottom and next-page parts of split centred cells (rendered text spans 84,468 → 85,496, page counts 1,410 → 1,413) — parser output and reflow unchanged from 4.22.9 |

‎README.md‎

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ await writeFile("보고서.hwpx", Buffer.from(hwpx))
100100

101101
## 검증 결과
102102

103-
**4.22.12 · 2026-10-18 검증**. 고정 코퍼스와 참조 기준으로 측정한 결과입니다.
103+
**4.22.13 · 2026-10-18 검증**. 고정 코퍼스와 참조 기준으로 측정한 결과입니다.
104104

105105
| 대상 | 규모 | 결과 |
106106
| --- | --- | --- |
@@ -116,18 +116,19 @@ await writeFile("보고서.hwpx", Buffer.from(hwpx))
116116

117117
표 구조 점수와 셀 내용·화면 재현은 별도 지표입니다. 중첩표 100%는 위 101표에 한정하며 전체 PDF·조판의 완전 일치를 뜻하지 않습니다. 채점 범위·제외 기준·전 벤치 문서별 비교는 [벤치마크 상세](docs/benchmarks.md)에 있습니다.
118118

119-
**4.22.12 개선 검증(2026-10-18)**: 4.22.11과 같은 채점기·코퍼스로 다시 잰 결과 파서 출력(opendataloader-bench 네 모드·PDF 글·표·별표·OCR·기타 포맷·왕복·생성)은 문서별로 4.22.11과 같고 조판 저장본 대조 지표도 그대로이며, 렌더(한컴 PDF 짝) 글 조각 위치(1.5pt 안) **85,837/90,418→85,968/90,428**, 그림 위치 **3,866→3,869/3,976**으로 개선했습니다. 글상자를 지금 크기(curSz)로 놓고, 제 표에 밀려 저장된 쪽 나누기 문단을 새 쪽에서 시작하고, 칸 너비 합이 표 너비와 같은 행이 없는 표의 열 경계를 가장 긴 길로 그리며, 쪽 좌표로 적힌 조판 캐시·글 영역 폭 없는 글상자·옛한글 자모 폭에서 글상자 글이 무너지던 것을 바로잡았습니다. [상세](docs/benchmarks.md)
119+
**4.22.13 개선 검증(2026-10-18)**: 4.22.12와 같은 채점기·코퍼스로 다시 잰 결과 파서 출력(opendataloader-bench 네 모드·PDF 글·표·별표·OCR·기타 포맷·왕복·생성)은 문서별로 4.22.12와 같고 조판 저장본 대조 지표도 그대로이며, 렌더(한컴 PDF 짝) 글 조각 위치(1.5pt 안) **85,968/90,428→86,051/90,433**, 그림 위치 **3,869→3,872/3,976**, 쪽 수 **1,413→1,421/1,431**로 개선했습니다. 꼬리말 없는 구역의 쪽 번호 자리, 한컴이 쪽에서 갈라 저장한 표·행의 쪽 넘김, 칸 안 표가 줄을 민 자리, 쪽을 넘는 칸 안 표를 바로잡았습니다. [상세](docs/benchmarks.md)
120120

121121
빈 행을 접을 때 기존 논리 격자 안의 병합 모서리 셀을 보존합니다. 재현 PDF의 번호 기호 6종은 복원했으며, HTML 선 출력과 미등록 글꼴 기호는 [남은 한계](docs/parsing-loss-reproductions.md)로 기록했습니다.
122122

123-
외부 PDF 벤치 **opendataloader-bench 200문서**는 4.22.12 배포 후보의 동일 코퍼스 재검증에서 기본값 종합 **0.964**, OCR 끔 **0.939**입니다. [옵션별 결과와 재현 방법](docs/benchmarks.md#pdf--markdown--opendataloader-bench)
123+
외부 PDF 벤치 **opendataloader-bench 200문서**는 4.22.13 배포 후보의 동일 코퍼스 재검증에서 기본값 종합 **0.964**, OCR 끔 **0.939**입니다. [옵션별 결과와 재현 방법](docs/benchmarks.md#pdf--markdown--opendataloader-bench)
124124

125125
## 최근 업데이트
126126

127-
최신 배포: **[4.22.12](https://github.com/chrisryugj/kordoc/releases/tag/v4.22.12)** · 2026-10-18
127+
최신 배포: **[4.22.13](https://github.com/chrisryugj/kordoc/releases/tag/v4.22.13)** · 2026-10-18
128128

129129
| 버전 | 주요 변경 |
130130
| --- | --- |
131+
| 4.22.13 | 쪽 넘김·칸 안 표 렌더 보정 — 꼬리말 0 쪽 번호, 갈라 저장한 칸이 있는 표의 넘침 여유 해제, 첫 줄도 안 드는 갈라 저장 행은 다음 쪽, 칸 안 표에 밀린 줄, 쪽을 넘는 칸 안 표(한컴 PDF 글 조각 위치 85,968 → 86,051, 그림 3,869 → 3,872, 쪽 수 1,413 → 1,421) — 파서 출력·조판 지표는 4.22.12와 같음 |
131132
| 4.22.12 | 글상자 렌더 보정 — 지금 크기(curSz)·쪽 좌표 캐시 재조판·글 영역 폭 없는 글상자·옛한글 자모 폭, 제 표에 밀린 쪽 나누기 문단, 같은 너비 행 없는 표의 가장 긴 길 열 경계(한컴 PDF 글 조각 위치 85,837 → 85,968, 그림 3,866 → 3,869) — 파서 출력·조판 지표는 4.22.11과 같음 |
132133
| 4.22.11 | 렌더 보정 — 갈린 칸 안 표의 이어진 쪽 시작·갈린 행 마지막 조각의 개체 바닥·여러 행 칸 내용 높이·갈린 가운데 칸 마지막 조각 정렬(한컴 PDF 글 조각 위치 85,496 → 85,837), 빈 문단 그림이 쪽 아래로 밀리던 4.21.31 회귀 수정 — 파서 출력·조판은 4.22.10과 같음 |
133134
| 4.22.10 | MCP `parse_document` OCR 모델 인수(#165), 렌더 표 보정 — 행마다 다른 칸 너비의 열 경계·병합 칸 행 성장·갈라 저장한 칸·쪽 바닥 첫 행·갈린 가운데 칸 다음 쪽 조각(한컴 PDF 글 조각 위치 84,468 → 85,496, 쪽 수 1,410 → 1,413) — 파서 출력·조판은 4.22.9와 같음 |

‎docs/benchmarks-en.md‎

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,25 @@
22

33
Scoring rules, reproduction steps and per-option results behind the README [Validation](../README-EN.md#validation) section. Internal corpora are checked by `npm run bench:gate` and mandatory release gates. The external opendataloader-bench is measured separately.
44

5+
## 4.22.13: five page-break and in-cell table rendering rounds · 2026-10-18
6+
7+
Re-measured against 4.22.12 with the same scorer and corpora (`node bench/suite.mjs cmp r42212 r42213`). All five rounds changed only rendering and reflow, so parser output (generation included) is the same per document in every bench, and the reflow saved-file metrics are unchanged. No document's rendered spans dropped in any round (compared over the full list of paired documents), and no document newly lost its page count.
8+
9+
| Metric | 4.22.12 | 4.22.13 |
10+
| --- | --- | --- |
11+
| ODL default · `plain`+`htmlTables` · `ocr: true` · `ocr: false` (200 documents) | 0.96367 · 0.97512 · 0.96521 · 0.93903 | unchanged |
12+
| Reflow body · cell first lines · multi-line paragraphs (saved files, 12 folders) | 76,729/78,376 · 205,015/205,307 · 24,940/25,187 | unchanged |
13+
| Rendered text spans within 1.5pt (Hancom PDF pairs) | 85,968/90,428 | 86,051/90,433 |
14+
| Rendered images within 2pt · page counts | 3,869/3,976 · 1,413/1,431 | 3,872/3,976 · 1,421/1,431 |
15+
16+
| Round | Fix | Rendered spans |
17+
| --- | --- | --- |
18+
| 31 | Bottom page numbers in sections with a zero footer area sit in the middle of the bottom margin (baseline = page bottom − bottom margin/2 − 2.43pt) | +48 |
19+
| 32 | Tables with cell lines that Hancom saved split across pages no longer stay on one page by overflowing into the bottom margin | +11 (pages +4) |
20+
| 33 | A saved-split row whose first line does not fit in the room left starts on the next page | 0 (pages +2) |
21+
| 34 | A top-and-bottom table in an empty cell paragraph is drawn above the line when the line was saved pushed down by that table (from the end of the previous paragraph in the cell) | +24 (images +3) |
22+
| 35 | When a floating table anchored in an unsplit cell runs past the page, the cell and the table continue to the page where the table ends (cell height counts the floating table's rows) | 0 (pages +2) |
23+
524
## 4.22.12: five text-box and rendering rounds · 2026-10-18
625

726
Re-measured against 4.22.11 with the same scorer and corpora (`node bench/suite.mjs cmp r42211 r42212`). All five rounds changed only rendering and reflow, so parser output (generation included) is the same per document in every bench, and the reflow saved-file metrics are unchanged. No document's rendered spans dropped in any round.
@@ -184,7 +203,7 @@ The nested-table 100% is limited to this text-layer sample; it does not cover PD
184203

185204
[opendataloader-bench](https://github.com/opendataloader-project/opendataloader-bench) scores 200 PDFs (papers, reports, slides, posters, scans) against human-made ground truth for **reading order (NID), table structure (TEDS) and heading hierarchy (MHS)** (1.0 = identical to the ground truth).
186205

187-
### Latest separate verification: 4.22.12 release candidate · 2026-10-18
206+
### Latest separate verification: 4.22.13 release candidate · 2026-10-18
188207

189208
| Setting | Overall | Reading order | Tables | Headings |
190209
| --- | ---: | ---: | ---: | ---: |
@@ -193,7 +212,7 @@ The nested-table 100% is limited to this text-layer sample; it does not cover PD
193212
| `ocr: true` | 0.965 | 0.965 | 0.980 | 0.954 |
194213
| `ocr: false` | 0.939 | 0.940 | 0.937 | 0.934 |
195214

196-
Each mode covers 200 documents with no missing predictions. Measured with `node bench/suite.mjs run r42212 --only=odl,odlbest,odlocr,odlfast`; every document is unchanged from 4.22.11 in all four modes (this release changed only rendering and reflow). [4.22.0 results](release-4.22.0.json) · [Earlier version comparisons](quality-campaign-session-2026-10-09.md)
215+
Each mode covers 200 documents with no missing predictions. Measured with `node bench/suite.mjs run r42213 --only=odl,odlbest,odlocr,odlfast`; every document is unchanged from 4.22.12 in all four modes (this release changed only rendering and reflow). [4.22.0 results](release-4.22.0.json) · [Earlier version comparisons](quality-campaign-session-2026-10-09.md)
197216

198217
### Full option sweep: historical results, 2026-09-29
199218

0 commit comments

Comments
 (0)