kordoc 4.21.9 → 4.21.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/README.md +15 -12
  2. package/dist/{-QXIJTZUP.js → -3K3QNRP7.js} +11 -11
  3. package/dist/{chunk-QACOMAEX.js → chunk-3DIAVYHS.js} +3 -3
  4. package/dist/{chunk-MGSUORGY.js → chunk-4IQHSBGA.js} +7 -4
  5. package/dist/chunk-4IQHSBGA.js.map +1 -0
  6. package/dist/{chunk-TS4GX4WP.js → chunk-5BDCETE5.js} +2 -2
  7. package/dist/{chunk-MWH3WQ2C.js → chunk-5SGREZ36.js} +8 -5
  8. package/dist/chunk-5SGREZ36.js.map +1 -0
  9. package/dist/{chunk-FWCKZXJY.js → chunk-7F56Y2VV.js} +2 -2
  10. package/dist/{chunk-62HRSQL3.js → chunk-AOWEFVJX.js} +2 -2
  11. package/dist/{chunk-HDPQ7QBF.js → chunk-B375LJ27.js} +3 -3
  12. package/dist/{chunk-UKCOUVER.js → chunk-D234SVXL.js} +2 -2
  13. package/dist/{chunk-B6QMZ5H6.js → chunk-DT4UY5MZ.js} +2 -2
  14. package/dist/{chunk-O53OIPMY.js → chunk-EPPNA2KB.js} +2 -2
  15. package/dist/{chunk-O53OIPMY.js.map → chunk-EPPNA2KB.js.map} +1 -1
  16. package/dist/{chunk-B6WEXUMV.js → chunk-FXWRLGQF.js} +2 -2
  17. package/dist/{chunk-LMICG6MM.js → chunk-FZQV2ZO6.js} +2 -2
  18. package/dist/{chunk-5NO6L655.cjs → chunk-MGVFUAWH.cjs} +3 -3
  19. package/dist/{chunk-5NO6L655.cjs.map → chunk-MGVFUAWH.cjs.map} +1 -1
  20. package/dist/{chunk-EG3UE3BC.cjs → chunk-NFIOC6CS.cjs} +3 -3
  21. package/dist/{chunk-EG3UE3BC.cjs.map → chunk-NFIOC6CS.cjs.map} +1 -1
  22. package/dist/{chunk-R6BSCIZR.cjs → chunk-ONQS3YOG.cjs} +2 -2
  23. package/dist/{chunk-R6BSCIZR.cjs.map → chunk-ONQS3YOG.cjs.map} +1 -1
  24. package/dist/{chunk-EXCGDQPB.js → chunk-PFG6AN6H.js} +2 -2
  25. package/dist/{chunk-FRM6WYNC.js → chunk-PGPGPM5J.js} +2 -2
  26. package/dist/{chunk-2PSKHMH2.js → chunk-Q2DQ3NZB.js} +4 -4
  27. package/dist/{chunk-ZK5L7VPR.js → chunk-QMWVKGXI.js} +6 -6
  28. package/dist/{chunk-LORBG6MG.cjs → chunk-RDTXIMMP.cjs} +6 -6
  29. package/dist/{chunk-LORBG6MG.cjs.map → chunk-RDTXIMMP.cjs.map} +1 -1
  30. package/dist/{chunk-HE5XFKH2.js → chunk-RU3ESQI3.js} +2 -2
  31. package/dist/{chunk-HE5XFKH2.js.map → chunk-RU3ESQI3.js.map} +1 -1
  32. package/dist/{chunk-6EKJ6J47.js → chunk-RUPSY4T4.js} +2 -2
  33. package/dist/{chunk-EBYYQO6A.js → chunk-VRWHLWSW.js} +10 -10
  34. package/dist/{chunk-TAPXIXAD.js → chunk-WP7JK5ZR.js} +3 -3
  35. package/dist/{chunk-EFTJ35T6.js → chunk-WZTRVWKQ.js} +2 -2
  36. package/dist/{chunk-FVCIEW26.cjs → chunk-X33QDIUK.cjs} +41 -38
  37. package/dist/chunk-X33QDIUK.cjs.map +1 -0
  38. package/dist/{chunk-BJP4IWGE.js → chunk-X4TZEAYE.js} +2 -2
  39. package/dist/{chunk-V4XBYDKE.cjs → chunk-XG55OZTQ.cjs} +13 -13
  40. package/dist/{chunk-V4XBYDKE.cjs.map → chunk-XG55OZTQ.cjs.map} +1 -1
  41. package/dist/{chunk-UK4UHB23.js → chunk-ZPB5MTYP.js} +2 -2
  42. package/dist/chunks-RA26PEF7.js +10 -0
  43. package/dist/cli.js +30 -30
  44. package/dist/{formula-3REO53LY.cjs → formula-5RQKN6UM.cjs} +9 -9
  45. package/dist/{formula-3REO53LY.cjs.map → formula-5RQKN6UM.cjs.map} +1 -1
  46. package/dist/{formula-HJ54W6OC.js → formula-AFDU5B2J.js} +3 -3
  47. package/dist/{formula-KSDCEDLB.js → formula-WXHFQE4T.js} +4 -4
  48. package/dist/{image-ocr-YYOYHZDE.js → image-ocr-2BC7V7J4.js} +9 -9
  49. package/dist/{image-ocr-Q7QV4L4N.cjs → image-ocr-7OWBI7DA.cjs} +15 -15
  50. package/dist/{image-ocr-Q7QV4L4N.cjs.map → image-ocr-7OWBI7DA.cjs.map} +1 -1
  51. package/dist/{image-ocr-IFL6L5TW.js → image-ocr-EGSQRSZ7.js} +6 -6
  52. package/dist/index.cjs +276 -276
  53. package/dist/index.js +5 -5
  54. package/dist/mcp.js +22 -22
  55. package/dist/{model-bundle-BY4E4RB4.js → model-bundle-C4K4X224.js} +5 -5
  56. package/dist/{models-KN7YXMZR.js → models-VC7YQO2Y.js} +5 -5
  57. package/dist/{parse-worker-v2-YEGH3LDV.js → parse-worker-v2-QIA6PYGX.js} +12 -12
  58. package/dist/{parser-H2UDOCP6.cjs → parser-S53VTR67.cjs} +130 -130
  59. package/dist/{parser-H2UDOCP6.cjs.map → parser-S53VTR67.cjs.map} +1 -1
  60. package/dist/{parser-EBH4V7UW.js → parser-WBDZCJND.js} +11 -11
  61. package/dist/{parser-K67MDRVQ.js → parser-XXBATYBM.js} +8 -8
  62. package/dist/pdf-ocr-K7EZB4BO.js +22 -0
  63. package/dist/pdf-ocr-SXQWKEUL.cjs +19 -0
  64. package/dist/{pdf-ocr-URHROKTL.cjs.map → pdf-ocr-SXQWKEUL.cjs.map} +1 -1
  65. package/dist/pdf-ocr-YETVVNZV.js +18 -0
  66. package/dist/{profile-io-5AUIY4ZK.js → profile-io-FRKYLVXA.js} +3 -3
  67. package/dist/{rasterize-FCFSKOJN.js → rasterize-OIFQKD2Z.js} +3 -3
  68. package/dist/{redact-doc-XNHWZBLI.js → redact-doc-3772TKD5.js} +11 -11
  69. package/dist/{render-GKYMLICR.js → render-76VTZCV3.js} +7 -7
  70. package/dist/seal-SB45RMGC.js +10 -0
  71. package/dist/{setup-YTGXU6UG.js → setup-6LCBF5RS.js} +3 -3
  72. package/dist/visual-CMXPHRYA.js +20 -0
  73. package/dist/{watch-PGLPSQZB.js → watch-4KAUOPTD.js} +12 -12
  74. package/package.json +1 -1
  75. package/dist/chunk-FVCIEW26.cjs.map +0 -1
  76. package/dist/chunk-MGSUORGY.js.map +0 -1
  77. package/dist/chunk-MWH3WQ2C.js.map +0 -1
  78. package/dist/chunks-OR6UM6IP.js +0 -10
  79. package/dist/pdf-ocr-ECPSNDNK.js +0 -22
  80. package/dist/pdf-ocr-URHROKTL.cjs +0 -19
  81. package/dist/pdf-ocr-XFHI32BK.js +0 -18
  82. package/dist/seal-VQS7DK5S.js +0 -10
  83. package/dist/visual-7PEKXK3M.js +0 -20
  84. /package/dist/{-QXIJTZUP.js.map → -3K3QNRP7.js.map} +0 -0
  85. /package/dist/{chunk-QACOMAEX.js.map → chunk-3DIAVYHS.js.map} +0 -0
  86. /package/dist/{chunk-TS4GX4WP.js.map → chunk-5BDCETE5.js.map} +0 -0
  87. /package/dist/{chunk-FWCKZXJY.js.map → chunk-7F56Y2VV.js.map} +0 -0
  88. /package/dist/{chunk-62HRSQL3.js.map → chunk-AOWEFVJX.js.map} +0 -0
  89. /package/dist/{chunk-HDPQ7QBF.js.map → chunk-B375LJ27.js.map} +0 -0
  90. /package/dist/{chunk-UKCOUVER.js.map → chunk-D234SVXL.js.map} +0 -0
  91. /package/dist/{chunk-B6QMZ5H6.js.map → chunk-DT4UY5MZ.js.map} +0 -0
  92. /package/dist/{chunk-B6WEXUMV.js.map → chunk-FXWRLGQF.js.map} +0 -0
  93. /package/dist/{chunk-LMICG6MM.js.map → chunk-FZQV2ZO6.js.map} +0 -0
  94. /package/dist/{chunk-EXCGDQPB.js.map → chunk-PFG6AN6H.js.map} +0 -0
  95. /package/dist/{chunk-FRM6WYNC.js.map → chunk-PGPGPM5J.js.map} +0 -0
  96. /package/dist/{chunk-2PSKHMH2.js.map → chunk-Q2DQ3NZB.js.map} +0 -0
  97. /package/dist/{chunk-ZK5L7VPR.js.map → chunk-QMWVKGXI.js.map} +0 -0
  98. /package/dist/{chunk-6EKJ6J47.js.map → chunk-RUPSY4T4.js.map} +0 -0
  99. /package/dist/{chunk-EBYYQO6A.js.map → chunk-VRWHLWSW.js.map} +0 -0
  100. /package/dist/{chunk-TAPXIXAD.js.map → chunk-WP7JK5ZR.js.map} +0 -0
  101. /package/dist/{chunk-EFTJ35T6.js.map → chunk-WZTRVWKQ.js.map} +0 -0
  102. /package/dist/{chunk-BJP4IWGE.js.map → chunk-X4TZEAYE.js.map} +0 -0
  103. /package/dist/{chunk-UK4UHB23.js.map → chunk-ZPB5MTYP.js.map} +0 -0
  104. /package/dist/{chunks-OR6UM6IP.js.map → chunks-RA26PEF7.js.map} +0 -0
  105. /package/dist/{formula-HJ54W6OC.js.map → formula-AFDU5B2J.js.map} +0 -0
  106. /package/dist/{formula-KSDCEDLB.js.map → formula-WXHFQE4T.js.map} +0 -0
  107. /package/dist/{image-ocr-YYOYHZDE.js.map → image-ocr-2BC7V7J4.js.map} +0 -0
  108. /package/dist/{image-ocr-IFL6L5TW.js.map → image-ocr-EGSQRSZ7.js.map} +0 -0
  109. /package/dist/{model-bundle-BY4E4RB4.js.map → model-bundle-C4K4X224.js.map} +0 -0
  110. /package/dist/{models-KN7YXMZR.js.map → models-VC7YQO2Y.js.map} +0 -0
  111. /package/dist/{parse-worker-v2-YEGH3LDV.js.map → parse-worker-v2-QIA6PYGX.js.map} +0 -0
  112. /package/dist/{parser-EBH4V7UW.js.map → parser-WBDZCJND.js.map} +0 -0
  113. /package/dist/{parser-K67MDRVQ.js.map → parser-XXBATYBM.js.map} +0 -0
  114. /package/dist/{pdf-ocr-ECPSNDNK.js.map → pdf-ocr-K7EZB4BO.js.map} +0 -0
  115. /package/dist/{pdf-ocr-XFHI32BK.js.map → pdf-ocr-YETVVNZV.js.map} +0 -0
  116. /package/dist/{profile-io-5AUIY4ZK.js.map → profile-io-FRKYLVXA.js.map} +0 -0
  117. /package/dist/{rasterize-FCFSKOJN.js.map → rasterize-OIFQKD2Z.js.map} +0 -0
  118. /package/dist/{redact-doc-XNHWZBLI.js.map → redact-doc-3772TKD5.js.map} +0 -0
  119. /package/dist/{render-GKYMLICR.js.map → render-76VTZCV3.js.map} +0 -0
  120. /package/dist/{seal-VQS7DK5S.js.map → seal-SB45RMGC.js.map} +0 -0
  121. /package/dist/{setup-YTGXU6UG.js.map → setup-6LCBF5RS.js.map} +0 -0
  122. /package/dist/{visual-7PEKXK3M.js.map → visual-CMXPHRYA.js.map} +0 -0
  123. /package/dist/{watch-PGLPSQZB.js.map → watch-4KAUOPTD.js.map} +0 -0
package/README.md CHANGED
@@ -12,7 +12,7 @@ HWP 3.x·5.x, HWPX, HWPML, PDF, XLS·XLSX, DOCX, PPTX, PNG·JPG·WebP를 Markdow
12
12
  [English](README-EN.md) · [상세 사용법](docs/usage.md) · [벤치마크](docs/benchmarks.md) · [변경 이력](CHANGELOG.md)
13
13
 
14
14
  - 📊 **PDF 공개 벤치 종합 0.963** — opendataloader-bench 200문서. 공개 12개 파서 비교 1위(2026-09-29 기록). [측정 조건](docs/benchmarks.md)
15
- - 🇰🇷 **한국 공문서 표 구조 100%** — 원본 HWPX 2,286문서의 보이는 표 **9,865개 전부 구조 일치**. [4.18.8 검증](docs/release-4.18.8.json)
15
+ - 🇰🇷 **한국 공문서 표 구조 100%** — 원본 HWPX 2,424문서의 보이는 표 **10,342개 전부 구조 일치**. [4.21.10 검증](docs/benchmarks.md)
16
16
 
17
17
  [![Kordoc 활용하기 — 영상 보기](./docs/video-demo.jpg)](https://youtu.be/Q13GmgDcIw0)
18
18
 
@@ -98,28 +98,31 @@ await writeFile("보고서.hwpx", Buffer.from(hwpx))
98
98
 
99
99
  ## 검증 결과
100
100
 
101
- **4.18.8 · 2026-10-02 배포 검증**. 고정 코퍼스와 참조 기준으로 측정한 결과입니다.
101
+ **4.21.10 · 2026-10-10 배포 검증**. 고정 코퍼스와 참조 기준으로 측정한 결과입니다.
102
102
 
103
103
  | 대상 | 규모 | 결과 |
104
104
  | --- | --- | --- |
105
- | HWPX | 2,286문서 · 9,865표 | 표 구조 일치 **9,865/9,865 · 100%** |
106
- | HWP 5.x ↔ HWPX | 1,120쌍 · 4,258표 | 짝 문서의 표 구조 일치 **100%** |
107
- | PDF 글 | 744쌍 | 글자 재현율 **99.83%** · 읽기 순서 **99.15%** |
108
- | PDF 표 | 708쌍 · 2,331표 | 표 탐지 **99.83%** · 구조 일치 **97.94%** |
105
+ | HWPX | 2,424문서 · 10,342표 | 표 구조 일치 **10,342/10,342 · 100%** |
106
+ | HWP 5.x ↔ HWPX | 1,130쌍 · 4,315표 | 짝 문서의 표 구조 일치 **100%** |
107
+ | PDF 글 | 744쌍 | 글자 재현율 **99.83%** · 정확도 **99.58%** · 읽기 순서 **99.16%** · 어절 F1 **98.85%** |
108
+ | PDF 표 | 708쌍 · 2,331표 | 표 탐지 **99.83%** · 구조 일치 **97.98%** · 칸 F1 **0.991** |
109
+ | PDF 전체 | 1,911문서 중 1,729건 채점 | 글 커버리지 **99.80%** |
110
+ | OCR | 53문서 · 102쪽 | CER **0.0421** · 글자 재현율 **99.03%** |
109
111
 
110
- 표 구조 점수와 셀 내용·화면 재현은 별도 지표입니다. 채점 범위·제외 기준·OCR 결과는 [벤치마크 상세](docs/benchmarks.md), 실제 게시 검증은 [4.18.8 기록](docs/release-4.18.8.json)에 있습니다.
112
+ 표 구조 점수와 셀 내용·화면 재현은 별도 지표입니다. 채점 범위·제외 기준·전 벤치 문서별 비교는 [벤치마크 상세](docs/benchmarks.md)에 있습니다.
111
113
 
112
- 외부 PDF 벤치 **opendataloader-bench 200문서**는 4.21.5 별도 측정에서 기본값 종합 **0.963**, OCR 끔 **0.939**입니다. [옵션별 결과와 재현 방법](docs/benchmarks.md#pdf--markdown--opendataloader-bench)
114
+ 외부 PDF 벤치 **opendataloader-bench 200문서**는 4.21.10 배포 측정에서 기본값 종합 **0.963**, OCR 끔 **0.939**입니다. [옵션별 결과와 재현 방법](docs/benchmarks.md#pdf--markdown--opendataloader-bench)
113
115
 
114
116
  ## 최근 업데이트
115
117
 
116
- 최신 배포: **[4.21.9](https://github.com/chrisryugj/kordoc/releases/tag/v4.21.9)** · 2026-10-10
118
+ 최신 배포: **[4.21.10](https://github.com/chrisryugj/kordoc/releases/tag/v4.21.10)** · 2026-10-10
117
119
 
118
120
  | 버전 | 주요 변경 |
119
121
  | --- | --- |
120
- | 4.21.9 | PDF 줄 꺾임 이음 — 낱말 가운데 꺾임·겹조사·계사·접미사·명사+하다, 본문 위 첨자 행 흡수 (문서별 하락 0) |
121
- | 4.21.8 | PDF 표 묶음 — 돌려 찍은 가로 표 세우기·데이터 표의 차트 오판·좁은 숫자 열·칸 걸친 한 조각·칸 안 쌓인 금액 (문서별 하락 0) |
122
- | 4.21.7 | PDF 토막 괘선 칸·글 조각 클립·연락처 표 — 예산서 상세 칸(OCR CER 0.0512 → 0.0445), ezPDF·MS Print 글 조각 클립이 만든 가짜 표, 연락처 6열 (문서별 하락 0) |
122
+ | 4.21.10 | PDF 흐름도 표·괄호 풀이 — 선 격자 표를 품은 클러스터 후보 거름, 짧은 괄호 풀이 앞 줄 꺾임 이음 (PDF 어절 F1 98.84 → 98.85%·OCR CER 0.0443 → 0.0421, 문서별 하락 0) |
123
+ | 4.21.9 | PDF 줄 꺾임 이음 — 낱말 가운데 꺾임·겹조사·계사·접미사·명사+하다, 본문 위 첨자 행 흡수 (PDF 어절 F1 98.81 → 98.84%·글 커버리지 99.79 → 99.80%, 문서별 하락 0) |
124
+ | 4.21.8 | PDF 표 묶음 — 돌려 찍은 가로 표 세우기·데이터 표의 차트 오판·좁은 숫자 열·칸 걸친 한 조각·칸 안 쌓인 금액 (OCR CER 0.0445 → 0.0443·열화 OCR scan 0.0821 → 0.0805, 문서별 하락 0) |
125
+ | 4.21.7 | PDF 토막 괘선 칸·글 조각 클립·연락처 표 — 예산서 상세 칸(OCR CER 0.0512 → 0.0445), ezPDF·MS Print 글 조각 클립이 만든 가짜 표, 연락처 6열 (열화 OCR scan 0.0954 → 0.0821·글 커버리지 99.78 → 99.79%, 문서별 하락 0) |
123
126
  | 4.21.6 | 연락처 표 부서별 병합·여러 사람 칸 분할(PDF 표 구조 일치 97.94→97.98%), XLSX·XLS 200열 밖 칸 유실 수리, HWP3 포함 그림 추출, 수식 OCR LaTeX 명령 쪼개기·영역 상한 수리, PPTX 서식 트랙·코퍼스 보강(HWP3 75·서식 58·rhwp 230) |
124
127
  | 4.21.5 | PDF 품질 묶음 — OCR 두 단 가짜 표(#141 부작용)·그림 OCR 라벨 묶음·한 자리 눈금, 주소 링크·벡터 차트 값 축·단 끝줄·각주 순서 (ODL 기본 0.958 → 0.963, 문서별 하락 0) · 개조식·보고서 요약 상자가 md→hwpx→md→hwpx 왕복에서 유지 |
125
128
  | 4.21.4 | MCP `fill_form` 값 파일 입력 `fields_file`(값이 대화에 안 남고 응답은 글자 수만), 전 벤치 묶음 러너·문서별 비교기 `bench/suite.mjs` |
@@ -54,17 +54,17 @@ import {
54
54
  unknownFontWarnings,
55
55
  usesGaejosikMunche,
56
56
  validateHwpx
57
- } from "./chunk-EBYYQO6A.js";
57
+ } from "./chunk-VRWHLWSW.js";
58
58
  import {
59
59
  blocksToPages
60
- } from "./chunk-6EKJ6J47.js";
60
+ } from "./chunk-RUPSY4T4.js";
61
61
  import {
62
62
  applySplices,
63
63
  buildParagraphSplices,
64
64
  buildRangeSplices,
65
65
  placeSealHwpx,
66
66
  scanSectionXml
67
- } from "./chunk-HDPQ7QBF.js";
67
+ } from "./chunk-B375LJ27.js";
68
68
  import {
69
69
  DEFAULT_REDACT_RULES,
70
70
  redactMarkdown,
@@ -72,7 +72,7 @@ import {
72
72
  } from "./chunk-3WSNLH4B.js";
73
73
  import {
74
74
  blocksToChunks
75
- } from "./chunk-FRM6WYNC.js";
75
+ } from "./chunk-PGPGPM5J.js";
76
76
  import {
77
77
  SPACE_EM_FIXED,
78
78
  SPACE_EM_FONT,
@@ -97,20 +97,20 @@ import {
97
97
  renderSceneToHtml,
98
98
  simulateWrap,
99
99
  simulateWrapKeepWord
100
- } from "./chunk-ZK5L7VPR.js";
100
+ } from "./chunk-QMWVKGXI.js";
101
101
  import "./chunk-7FCNOKOR.js";
102
- import "./chunk-EXCGDQPB.js";
102
+ import "./chunk-PFG6AN6H.js";
103
103
  import "./chunk-VQFA55IC.js";
104
- import "./chunk-B6WEXUMV.js";
104
+ import "./chunk-FXWRLGQF.js";
105
105
  import {
106
106
  blocksToMarkdown,
107
107
  flattenLayoutTables,
108
108
  hasStructuredCellContent
109
- } from "./chunk-UK4UHB23.js";
110
- import "./chunk-LMICG6MM.js";
109
+ } from "./chunk-ZPB5MTYP.js";
110
+ import "./chunk-FZQV2ZO6.js";
111
111
  import {
112
112
  VERSION
113
- } from "./chunk-O53OIPMY.js";
113
+ } from "./chunk-EPPNA2KB.js";
114
114
  export {
115
115
  AGENCY_COMMON_NAME,
116
116
  BUILTIN_TEMPLATES,
@@ -204,4 +204,4 @@ export {
204
204
  usesGaejosikMunche,
205
205
  validateHwpx
206
206
  };
207
- //# sourceMappingURL=-QXIJTZUP.js.map
207
+ //# sourceMappingURL=-3K3QNRP7.js.map
@@ -10,10 +10,10 @@ import {
10
10
  extractPageBlocksWithLines,
11
11
  getOcrModelsDir,
12
12
  parseCharacterDict
13
- } from "./chunk-MWH3WQ2C.js";
13
+ } from "./chunk-5SGREZ36.js";
14
14
  import {
15
15
  OPTIONAL_DEP_INSTALL_HINT
16
- } from "./chunk-HE5XFKH2.js";
16
+ } from "./chunk-RU3ESQI3.js";
17
17
 
18
18
  // src/ocr/ruling-lines.ts
19
19
  var INK_LUMA_MAX = 205;
@@ -2130,4 +2130,4 @@ export {
2130
2130
  groupOcrLines,
2131
2131
  ocrItemsToBlocks
2132
2132
  };
2133
- //# sourceMappingURL=chunk-QACOMAEX.js.map
2133
+ //# sourceMappingURL=chunk-3DIAVYHS.js.map
@@ -5,11 +5,11 @@ import {
5
5
  HEADING_RATIO_H2,
6
6
  HEADING_RATIO_H3,
7
7
  tidyScriptTags
8
- } from "./chunk-EXCGDQPB.js";
8
+ } from "./chunk-PFG6AN6H.js";
9
9
  import {
10
10
  safeMax,
11
11
  safeMin
12
- } from "./chunk-O53OIPMY.js";
12
+ } from "./chunk-EPPNA2KB.js";
13
13
 
14
14
  // src/pdf/line-extract.ts
15
15
  import { OPS } from "pdfjs-dist/legacy/build/pdf.mjs";
@@ -2224,9 +2224,11 @@ function wrapJoiner(prevText, nextText, lex, heads = true) {
2224
2224
  if (lex && heads) {
2225
2225
  const tail = left.match(/[가-힣]+$/)?.[0], run = right.match(/^[가-힣]+/)?.[0];
2226
2226
  if (tail && run && !STANDALONE_SYLLABLE.test(tail) && lex.startsWord(tail + run.slice(0, 2)) && !lex.spacedHead(tail, run[0])) return "";
2227
+ if (/[가-힣]{2}$/.test(left) && /^\([^()\s]*\)/.test(right) && !endsAsWord(left) && !/(?:함|음|됨|임|다)$/.test(left) && !BARE_UNIT_PAREN.test(right) && !/^\(\d/.test(right)) return "";
2227
2228
  }
2228
2229
  return " ";
2229
2230
  }
2231
+ var BARE_UNIT_PAREN = /^\((?:%|‰|[가-힣]{1,3}|[A-Za-z]{1,5}|[A-Za-z]+\/[A-Za-z]+)\)[.,]?$/;
2230
2232
  var PARA_LAST_LINE = /* @__PURE__ */ new WeakMap();
2231
2233
  var PARA_FIRST_LEFT = /* @__PURE__ */ new WeakMap();
2232
2234
  var PAGE_REF_TAIL = /(?:\t|…|·{2}|\.{3})\s*\d{1,4}(?:\s*\/\s*\d{1,4})?\s*$/;
@@ -8050,7 +8052,8 @@ function extractBlocksWithGrids(items, pageNum, pageWidth, pageHeight, grids, ho
8050
8052
  const proseColumns = findTwoColumnProseCutX(clusterItems) !== null || detectPersistentColumnGutter(remaining.map((i) => ({ x: i.x, y: i.y, w: i.w, h: i.h > 0 ? i.h : i.fontSize }))) !== null;
8051
8053
  const clusterResults = (proseColumns ? [] : detectClusterTables(clusterItems, pageNum)).filter((cr) => {
8052
8054
  const b = cr.bbox;
8053
- return !blocks.some((x) => x.type === "paragraph" && x.bbox && (x.text?.match(/\p{L}/gu)?.length ?? 0) >= 10 && Math.min(x.bbox.x + x.bbox.width, b.x + b.width) - Math.max(x.bbox.x, b.x) >= 0.8 * b.width && x.bbox.y >= b.y - 2 && x.bbox.y + x.bbox.height <= b.y + b.height + 2);
8055
+ const overlapX = (x) => Math.min(x.x + x.width, b.x + b.width) - Math.max(x.x, b.x);
8056
+ return !blocks.some((x) => x.bbox && x.bbox.y >= b.y - 2 && x.bbox.y + x.bbox.height <= b.y + b.height + 2 && (x.type === "paragraph" ? (x.text?.match(/\p{L}/gu)?.length ?? 0) >= 10 && overlapX(x.bbox) >= 0.8 * b.width : x.type === "table" && !ocrPage && x.table?.cols === cr.table.cols && overlapX(x.bbox) >= 0.5 * Math.min(x.bbox.width, b.width)));
8054
8057
  });
8055
8058
  if (clusterResults.length > 0) {
8056
8059
  const ciToIdx = /* @__PURE__ */ new Map();
@@ -8633,4 +8636,4 @@ export {
8633
8636
  UNRULED_REGION_TABLES,
8634
8637
  mergeOcrImageRegions
8635
8638
  };
8636
- //# sourceMappingURL=chunk-MGSUORGY.js.map
8639
+ //# sourceMappingURL=chunk-4IQHSBGA.js.map