kordoc 4.24.37 → 4.24.38
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.
- package/README.md +3 -3
- package/dist/{-HX3RWDQF.js → -LPQSUCWH.js} +60 -60
- package/dist/{chunk-VRCXXZHT.js → chunk-3NZP2VXB.js} +2 -2
- package/dist/{chunk-4OWD6WRS.js → chunk-5IYRVLGJ.js} +58 -7
- package/dist/{chunk-524MGRNW.js.map → chunk-5IYRVLGJ.js.map} +1 -1
- package/dist/{chunk-P3SZJJRK.js → chunk-5PONVN46.js} +7 -7
- package/dist/{chunk-QWYIYVIZ.cjs → chunk-6COUUT2E.cjs} +2 -2
- package/dist/{chunk-QWYIYVIZ.cjs.map → chunk-6COUUT2E.cjs.map} +1 -1
- package/dist/{chunk-BT5RPLV4.js → chunk-6MTH2EYN.js} +19 -19
- package/dist/{chunk-64MVXWS5.js → chunk-7F42AI4O.js} +2 -2
- package/dist/{chunk-4MWGWS3B.js → chunk-7F63OEHI.js} +2 -2
- package/dist/{chunk-IOABX3GR.cjs → chunk-ACQBUQB6.cjs} +153 -143
- package/dist/chunk-ACQBUQB6.cjs.map +1 -0
- package/dist/{chunk-6XOJ6CEK.js → chunk-AZ56HT3M.js} +3 -3
- package/dist/{chunk-OTB6UOIB.js → chunk-CDVDRC77.js} +2 -2
- package/dist/{chunk-MTSWWXSB.js → chunk-FA3MQGIF.js} +2 -2
- package/dist/{chunk-E527FG6I.cjs → chunk-FZWI6S7M.cjs} +3 -3
- package/dist/{chunk-E527FG6I.cjs.map → chunk-FZWI6S7M.cjs.map} +1 -1
- package/dist/{chunk-IWCWO3GP.js → chunk-G3JUKDMB.js} +2 -2
- package/dist/{chunk-2LDFUVVF.js → chunk-HWSJAYMR.js} +16 -7
- package/dist/chunk-HWSJAYMR.js.map +1 -0
- package/dist/{chunk-J42O5KBX.js → chunk-IDCU74H5.js} +2 -2
- package/dist/{chunk-KFJKRST5.js → chunk-ISMJQJOP.js} +14 -4
- package/dist/chunk-ISMJQJOP.js.map +1 -0
- package/dist/{chunk-RBCDHT55.cjs → chunk-JEHCRYUT.cjs} +98 -98
- package/dist/{chunk-RBCDHT55.cjs.map → chunk-JEHCRYUT.cjs.map} +1 -1
- package/dist/{chunk-524MGRNW.js → chunk-JL5REIEZ.js} +62 -11
- package/dist/{chunk-4OWD6WRS.js.map → chunk-JL5REIEZ.js.map} +1 -1
- package/dist/{chunk-BYOAA442.js → chunk-LAKPAL53.js} +2 -2
- package/dist/{chunk-J26TNCL7.js → chunk-MLXVSAR3.js} +2 -2
- package/dist/{chunk-6SVVVZLV.js → chunk-MNXKORB5.js} +2 -2
- package/dist/{chunk-33BKUIIC.js → chunk-MSRDRUOV.js} +2 -2
- package/dist/{chunk-7GN7O3K2.js → chunk-OBZV23UV.js} +51 -51
- package/dist/{chunk-B2VRTOQZ.js → chunk-ONC5LWD4.js} +18 -9
- package/dist/chunk-ONC5LWD4.js.map +1 -0
- package/dist/{chunk-XCMDIXWE.js → chunk-ONL4UTGQ.js} +32 -32
- package/dist/{chunk-GCFG67SF.js → chunk-ORIA2IFK.js} +50 -50
- package/dist/{chunk-T7K3CLXM.js → chunk-OYIGWP2N.js} +2 -2
- package/dist/{chunk-ONCXLQV4.js → chunk-P4OK4W2F.js} +3 -3
- package/dist/{chunk-LG4SU2D4.cjs → chunk-Q7WPRN62.cjs} +69 -60
- package/dist/chunk-Q7WPRN62.cjs.map +1 -0
- package/dist/{chunk-7MGZWDO4.js → chunk-RLED4WS3.js} +2 -2
- package/dist/{chunk-7MGZWDO4.js.map → chunk-RLED4WS3.js.map} +1 -1
- package/dist/{chunk-WZUTLJP2.cjs → chunk-SOI7R4LF.cjs} +133 -82
- package/dist/chunk-SOI7R4LF.cjs.map +1 -0
- package/dist/{chunk-YNIZLSM4.js → chunk-SORWBCEP.js} +8 -8
- package/dist/{chunk-6QK6ZQTF.js → chunk-TQUO7JR5.js} +3 -3
- package/dist/{chunk-LWSMZJLR.js → chunk-UJFT2OED.js} +2 -2
- package/dist/{chunk-UMQADPM5.js → chunk-UPO7Y3KL.js} +2 -2
- package/dist/{chunk-LM7LYH54.js → chunk-UQ2ZA3X4.js} +2 -2
- package/dist/{chunk-DRDW5ULI.js → chunk-UQTQXXHU.js} +14 -14
- package/dist/{chunk-EJKCEP3Q.cjs → chunk-URSNWPD4.cjs} +6 -6
- package/dist/{chunk-EJKCEP3Q.cjs.map → chunk-URSNWPD4.cjs.map} +1 -1
- package/dist/{chunk-KGX4TLBX.cjs → chunk-V5CNQSVW.cjs} +3 -3
- package/dist/{chunk-KGX4TLBX.cjs.map → chunk-V5CNQSVW.cjs.map} +1 -1
- package/dist/{chunk-OHLJEWS6.js → chunk-WOGL3YQK.js} +2 -2
- package/dist/{chunk-TQBNSAAS.js → chunk-XQPF6I6P.js} +2 -2
- package/dist/{chunk-JRVZBYQ2.js → chunk-XVWPMKPH.js} +18 -8
- package/dist/chunk-XVWPMKPH.js.map +1 -0
- package/dist/{chunk-RR2FKPFN.js → chunk-YPLKE5WG.js} +2 -2
- package/dist/{chunk-RR2FKPFN.js.map → chunk-YPLKE5WG.js.map} +1 -1
- package/dist/chunks-5L5OU6AI.js +11 -0
- package/dist/cli.js +61 -60
- package/dist/cli.js.map +1 -1
- package/dist/{formula-DLZUYM6F.js → formula-AV7SNRB4.js} +20 -17
- package/dist/{formula-DLZUYM6F.js.map → formula-AV7SNRB4.js.map} +1 -1
- package/dist/{formula-2MQWKUKR.js → formula-BMSREXB5.js} +19 -16
- package/dist/{formula-2MQWKUKR.js.map → formula-BMSREXB5.js.map} +1 -1
- package/dist/{formula-T2YY77JT.cjs → formula-NQHARDPX.cjs} +25 -22
- package/dist/formula-NQHARDPX.cjs.map +1 -0
- package/dist/generator-4CSCP6YH.js +17 -0
- package/dist/generator-OC366G6M.cjs +11 -0
- package/dist/{generator-YBWCA6B5.cjs.map → generator-OC366G6M.cjs.map} +1 -1
- package/dist/generator-UPESZL4M.js +10 -0
- package/dist/hancom-3CHPVF7H.js +84 -0
- package/dist/hancom-3CHPVF7H.js.map +1 -0
- package/dist/hancom-6Z7O3G4K.js +85 -0
- package/dist/hancom-6Z7O3G4K.js.map +1 -0
- package/dist/hancom-F5OHWSWU.cjs +85 -0
- package/dist/hancom-F5OHWSWU.cjs.map +1 -0
- package/dist/{image-ocr-N7UKGSRY.cjs → image-ocr-JQ4OEBBK.cjs} +86 -22
- package/dist/image-ocr-JQ4OEBBK.cjs.map +1 -0
- package/dist/{image-ocr-3NF3QJM7.js → image-ocr-PE5NAWAR.js} +76 -12
- package/dist/image-ocr-PE5NAWAR.js.map +1 -0
- package/dist/{image-ocr-XRKFK7AA.js → image-ocr-YJPNUWXR.js} +71 -7
- package/dist/image-ocr-YJPNUWXR.js.map +1 -0
- package/dist/index.cjs +1110 -1110
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +7 -1
- package/dist/index.d.ts +7 -1
- package/dist/index.js +70 -70
- package/dist/mcp.js +57 -56
- package/dist/mcp.js.map +1 -1
- package/dist/memo-OVXY467W.js +17 -0
- package/dist/{model-bundle-MO5I26AO.js → model-bundle-AXHPS54Q.js} +5 -5
- package/dist/{models-IIP4GZ57.js → models-CYRFBT43.js} +5 -5
- package/dist/{parse-worker-v2-GWOL3TTO.js → parse-worker-v2-GUJQNNOF.js} +28 -28
- package/dist/{parser-UCLUVQPA.js → parser-533OXR3B.js} +16 -16
- package/dist/{parser-R6UJQ6CV.cjs → parser-JVJSUMCA.cjs} +162 -162
- package/dist/{parser-R6UJQ6CV.cjs.map → parser-JVJSUMCA.cjs.map} +1 -1
- package/dist/{parser-DJQFM6VE.js → parser-S56VNTRV.js} +16 -16
- package/dist/{pdf-ocr-EWXGN4JB.js → pdf-ocr-FNW4IJWX.js} +8 -6
- package/dist/{pdf-ocr-7PSNKQOI.js → pdf-ocr-JNR4HA7O.js} +12 -10
- package/dist/pdf-ocr-ZBKAXNIE.cjs +40 -0
- package/dist/pdf-ocr-ZBKAXNIE.cjs.map +1 -0
- package/dist/{profile-io-NUU3VKNW.js → profile-io-GU5XFVSI.js} +3 -3
- package/dist/{rasterize-RARCMBJ3.js → rasterize-XOHGVWKM.js} +3 -3
- package/dist/{redact-doc-JKGDXGNJ.js → redact-doc-G5K4NVUN.js} +37 -37
- package/dist/{render-SGLKO3PG.js → render-J7VBXGFV.js} +14 -14
- package/dist/{rewrite-fallback-7YZXSR5K.js → rewrite-fallback-4QGM5F4V.js} +21 -21
- package/dist/seal-DSMAUDZ4.js +16 -0
- package/dist/{setup-5IYW4FZ7.js → setup-R5IH4AGD.js} +3 -3
- package/dist/{to-hwpx-QMANIAWY.js → to-hwpx-5ENZWUTU.js} +9 -9
- package/dist/{to-hwpx-4PM6XV2L.js → to-hwpx-I6LNQ4D4.js} +4 -4
- package/dist/to-hwpx-WCDMFRNN.cjs +16 -0
- package/dist/{to-hwpx-DEBHREDM.cjs.map → to-hwpx-WCDMFRNN.cjs.map} +1 -1
- package/dist/visual-QFPNYNCF.js +37 -0
- package/dist/{watch-YZS76EOS.js → watch-UM5SMZQP.js} +27 -27
- package/package.json +1 -1
- package/dist/chunk-2LDFUVVF.js.map +0 -1
- package/dist/chunk-B2VRTOQZ.js.map +0 -1
- package/dist/chunk-IOABX3GR.cjs.map +0 -1
- package/dist/chunk-JRVZBYQ2.js.map +0 -1
- package/dist/chunk-KFJKRST5.js.map +0 -1
- package/dist/chunk-LG4SU2D4.cjs.map +0 -1
- package/dist/chunk-WZUTLJP2.cjs.map +0 -1
- package/dist/chunks-NRA4GFK2.js +0 -11
- package/dist/formula-T2YY77JT.cjs.map +0 -1
- package/dist/generator-2WFWLJFG.js +0 -10
- package/dist/generator-5NWKWLOO.js +0 -17
- package/dist/generator-YBWCA6B5.cjs +0 -11
- package/dist/image-ocr-3NF3QJM7.js.map +0 -1
- package/dist/image-ocr-N7UKGSRY.cjs.map +0 -1
- package/dist/image-ocr-XRKFK7AA.js.map +0 -1
- package/dist/memo-XJ4NBV4J.js +0 -17
- package/dist/pdf-ocr-HECUBUMU.cjs +0 -38
- package/dist/pdf-ocr-HECUBUMU.cjs.map +0 -1
- package/dist/seal-LSS7WY6Z.js +0 -16
- package/dist/to-hwpx-DEBHREDM.cjs +0 -16
- package/dist/visual-QXYBJJ5D.js +0 -37
- /package/dist/{-HX3RWDQF.js.map → -LPQSUCWH.js.map} +0 -0
- /package/dist/{chunk-VRCXXZHT.js.map → chunk-3NZP2VXB.js.map} +0 -0
- /package/dist/{chunk-P3SZJJRK.js.map → chunk-5PONVN46.js.map} +0 -0
- /package/dist/{chunk-BT5RPLV4.js.map → chunk-6MTH2EYN.js.map} +0 -0
- /package/dist/{chunk-64MVXWS5.js.map → chunk-7F42AI4O.js.map} +0 -0
- /package/dist/{chunk-4MWGWS3B.js.map → chunk-7F63OEHI.js.map} +0 -0
- /package/dist/{chunk-6XOJ6CEK.js.map → chunk-AZ56HT3M.js.map} +0 -0
- /package/dist/{chunk-OTB6UOIB.js.map → chunk-CDVDRC77.js.map} +0 -0
- /package/dist/{chunk-MTSWWXSB.js.map → chunk-FA3MQGIF.js.map} +0 -0
- /package/dist/{chunk-IWCWO3GP.js.map → chunk-G3JUKDMB.js.map} +0 -0
- /package/dist/{chunk-J42O5KBX.js.map → chunk-IDCU74H5.js.map} +0 -0
- /package/dist/{chunk-BYOAA442.js.map → chunk-LAKPAL53.js.map} +0 -0
- /package/dist/{chunk-J26TNCL7.js.map → chunk-MLXVSAR3.js.map} +0 -0
- /package/dist/{chunk-6SVVVZLV.js.map → chunk-MNXKORB5.js.map} +0 -0
- /package/dist/{chunk-33BKUIIC.js.map → chunk-MSRDRUOV.js.map} +0 -0
- /package/dist/{chunk-7GN7O3K2.js.map → chunk-OBZV23UV.js.map} +0 -0
- /package/dist/{chunk-XCMDIXWE.js.map → chunk-ONL4UTGQ.js.map} +0 -0
- /package/dist/{chunk-GCFG67SF.js.map → chunk-ORIA2IFK.js.map} +0 -0
- /package/dist/{chunk-T7K3CLXM.js.map → chunk-OYIGWP2N.js.map} +0 -0
- /package/dist/{chunk-ONCXLQV4.js.map → chunk-P4OK4W2F.js.map} +0 -0
- /package/dist/{chunk-YNIZLSM4.js.map → chunk-SORWBCEP.js.map} +0 -0
- /package/dist/{chunk-6QK6ZQTF.js.map → chunk-TQUO7JR5.js.map} +0 -0
- /package/dist/{chunk-LWSMZJLR.js.map → chunk-UJFT2OED.js.map} +0 -0
- /package/dist/{chunk-UMQADPM5.js.map → chunk-UPO7Y3KL.js.map} +0 -0
- /package/dist/{chunk-LM7LYH54.js.map → chunk-UQ2ZA3X4.js.map} +0 -0
- /package/dist/{chunk-DRDW5ULI.js.map → chunk-UQTQXXHU.js.map} +0 -0
- /package/dist/{chunk-OHLJEWS6.js.map → chunk-WOGL3YQK.js.map} +0 -0
- /package/dist/{chunk-TQBNSAAS.js.map → chunk-XQPF6I6P.js.map} +0 -0
- /package/dist/{chunks-NRA4GFK2.js.map → chunks-5L5OU6AI.js.map} +0 -0
- /package/dist/{generator-2WFWLJFG.js.map → generator-4CSCP6YH.js.map} +0 -0
- /package/dist/{generator-5NWKWLOO.js.map → generator-UPESZL4M.js.map} +0 -0
- /package/dist/{memo-XJ4NBV4J.js.map → memo-OVXY467W.js.map} +0 -0
- /package/dist/{model-bundle-MO5I26AO.js.map → model-bundle-AXHPS54Q.js.map} +0 -0
- /package/dist/{models-IIP4GZ57.js.map → models-CYRFBT43.js.map} +0 -0
- /package/dist/{parse-worker-v2-GWOL3TTO.js.map → parse-worker-v2-GUJQNNOF.js.map} +0 -0
- /package/dist/{parser-UCLUVQPA.js.map → parser-533OXR3B.js.map} +0 -0
- /package/dist/{parser-DJQFM6VE.js.map → parser-S56VNTRV.js.map} +0 -0
- /package/dist/{pdf-ocr-7PSNKQOI.js.map → pdf-ocr-FNW4IJWX.js.map} +0 -0
- /package/dist/{pdf-ocr-EWXGN4JB.js.map → pdf-ocr-JNR4HA7O.js.map} +0 -0
- /package/dist/{profile-io-NUU3VKNW.js.map → profile-io-GU5XFVSI.js.map} +0 -0
- /package/dist/{rasterize-RARCMBJ3.js.map → rasterize-XOHGVWKM.js.map} +0 -0
- /package/dist/{redact-doc-JKGDXGNJ.js.map → redact-doc-G5K4NVUN.js.map} +0 -0
- /package/dist/{render-SGLKO3PG.js.map → render-J7VBXGFV.js.map} +0 -0
- /package/dist/{rewrite-fallback-7YZXSR5K.js.map → rewrite-fallback-4QGM5F4V.js.map} +0 -0
- /package/dist/{seal-LSS7WY6Z.js.map → seal-DSMAUDZ4.js.map} +0 -0
- /package/dist/{setup-5IYW4FZ7.js.map → setup-R5IH4AGD.js.map} +0 -0
- /package/dist/{to-hwpx-4PM6XV2L.js.map → to-hwpx-5ENZWUTU.js.map} +0 -0
- /package/dist/{to-hwpx-QMANIAWY.js.map → to-hwpx-I6LNQ4D4.js.map} +0 -0
- /package/dist/{visual-QXYBJJ5D.js.map → visual-QFPNYNCF.js.map} +0 -0
- /package/dist/{watch-YZS76EOS.js.map → watch-UM5SMZQP.js.map} +0 -0
package/README.md
CHANGED
|
@@ -125,7 +125,7 @@ await writeFile("보고서.hwpx", Buffer.from(hwpx))
|
|
|
125
125
|
| 법령 별표 | 272건 · 346표 | HWP **346/346**, PDF **343/346 · 99.13%** |
|
|
126
126
|
| PDF 전체 | 1,911문서 중 1,729건 채점 | 글 커버리지 **99.80%** |
|
|
127
127
|
| OCR | 53문서 · 102쪽 · 66표 | CER **0.0239** · 글자 재현율 **99.32%** · 표 구조 일치 **34/66** |
|
|
128
|
-
| KoOCR-Bench v2.0c (외부) | 공개 877쪽 (표·글·손글씨·순서) | 종합 기본값 **0.
|
|
128
|
+
| KoOCR-Bench v2.0c (외부) | 공개 877쪽 (표·글·손글씨·순서) | 종합 기본값 **0.810** · `ocrRec: "auto"` **0.831** · 제목 재현율 0.798 (4.24.38) |
|
|
129
129
|
| opendataloader-bench | PDF 200문서 | 종합 기본값 **0.964** · OCR 끔 **0.939** |
|
|
130
130
|
| HWPX 렌더 배치 | 한컴 PDF 짝 1,565문서(쪽 수 일치 1,508) · 글 조각 111,480 · 그림 4,300 | 글 위치(±1.5pt) **106,904 · 95.9%** · 그림 위치(±2pt) **4,213 · 98.0%** |
|
|
131
131
|
|
|
@@ -133,15 +133,15 @@ await writeFile("보고서.hwpx", Buffer.from(hwpx))
|
|
|
133
133
|
|
|
134
134
|
## 최근 업데이트
|
|
135
135
|
|
|
136
|
-
최신 배포: **[4.24.
|
|
136
|
+
최신 배포: **[4.24.38](https://github.com/chrisryugj/kordoc/releases/tag/v4.24.38)** · 2026-11-02
|
|
137
137
|
|
|
138
138
|
| 버전 | 주요 변경 | 수치 변화 |
|
|
139
139
|
| --- | --- | --- |
|
|
140
|
+
| 4.24.38 | OCR: 스캔·이미지 쪽 제목 판정(위아래로 쌓인 장 제목 잇기) · 작은 1칸 상자 쪽 두 단 읽기 순서 · 문장 조각 가짜 표 · 겹친 상자 이음매 글자 · 이미지 수식 OCR(`formulaOcr`) · to-hwpx 한/글 자체 저장 엔진(`--engine hancom`, 팝업 없이) | KoOCR-Bench 종합 0.807 → **0.810**(`auto` **0.831**) · 제목 재현율 0 → .798 · 자체 벤치 문서별 그대로 |
|
|
140
141
|
| 4.24.37 | OCR 표: 통계표 묶음 안 빈칸 열·괘선 없는 본문 행 펼치기·행 합침 아래 행 가르기·이웃 칸 값 몰림·음영 머리 띠와 칠한 첫 열 경계 · 머리 행 있는 표를 차트로 풀던 것 · 시험지 문항 상자 풀기 · `ocrRec: "auto"`(손글씨 쪽만 손글씨 모델) | KoOCR-Bench v2.0c 공개 877쪽 종합 0.742 → **0.807**(`ocrRec: "auto"` **0.828**) · 자체 벤치 문서별 그대로 |
|
|
141
142
|
| 4.24.36 | PDF 띄어쓰기(한컴 PDF): 자간 줄인 글의 낱말 공백 되살림 · 공백 글리프 위에 덧찍은 쉼표("55만원,") · 날짜 "2026. 8. 28." 공백 유지 · 줄 끝에서 갈린 연도 "20⏎25년" | PDF 글 어절 F1 99.076 → **99.103%** · 그 밖 지표 그대로 |
|
|
142
143
|
| 4.24.35 | PDF: 자간 줄인 수치의 같은 숫자 둘("129.9") 지키기 · 글자마다 찍은 첨자 줄을 본문에 붙이기 · 수 가운데서 꺾인 줄("1,2⏎96억"·"(4.1⏎6.~5.16.)")과 칸 소수 잇기 · 표지 책등 외기둥 세로 글 | PDF 표 칸 완전 일치 0.99264 → **0.99267** · 칸 내용 0.98902 → **0.98905** · PDF 글 순서 99.359 → **99.360%** · 어절 F1 99.073 → **99.076%** · 그 밖 지표 그대로 |
|
|
143
144
|
| 4.24.34 | to-hwpx: 파일 여러 개·폴더 일괄 변환(하위 폴더, 이미 있는 .hwpx 건너뜀) · PDF: 기호 글꼴 작은 네모로 찍고 공백으로 적은 "·" 글머리 되살림 · 글자 단위로 나눈 줄 머리 어미("는데"·"졌다")·겹조사 잇기 | PDF 표 칸 완전 일치 0.99221 → **0.99264** · 칸 내용 0.98896 → **0.98902** · PDF 글 재현율 99.883 → **99.885%** · 순서 99.356 → **99.359%** · 어절 F1 99.071 → **99.073%** · 그 밖 지표 그대로 |
|
|
144
|
-
| 4.24.33 | PDF 표: 모아찍기 쪽 넘김에서 오른쪽 쪽 머리 상자로 넘어간 칸 글을 앞 칸에 잇기 · 칸을 한 겹 더 깐 1×1 클립(통계표 숫자 칸)을 중첩 표 대신 칸 글로 | PDF 표 칸 내용 일치 0.98794 → **0.98896** · 칸 완전 일치 0.99153 → **0.99221** · 그 밖 벤치 지표 그대로 |
|
|
145
145
|
|
|
146
146
|
이전 버전과 상세 내용은 [변경 이력](CHANGELOG.md)에 있습니다.
|
|
147
147
|
|
|
@@ -53,34 +53,7 @@ import {
|
|
|
53
53
|
usesGaejosikMunche,
|
|
54
54
|
usesLogicStructure,
|
|
55
55
|
validateHwpx
|
|
56
|
-
} from "./chunk-
|
|
57
|
-
import {
|
|
58
|
-
blocksToPages
|
|
59
|
-
} from "./chunk-J26TNCL7.js";
|
|
60
|
-
import {
|
|
61
|
-
extractClickHereFields,
|
|
62
|
-
patchHwp,
|
|
63
|
-
patchHwpx
|
|
64
|
-
} from "./chunk-7GN7O3K2.js";
|
|
65
|
-
import {
|
|
66
|
-
addMemoHwpx
|
|
67
|
-
} from "./chunk-YNIZLSM4.js";
|
|
68
|
-
import {
|
|
69
|
-
placeSealHwpx
|
|
70
|
-
} from "./chunk-P3SZJJRK.js";
|
|
71
|
-
import "./chunk-VRCXXZHT.js";
|
|
72
|
-
import {
|
|
73
|
-
convertToHwpx,
|
|
74
|
-
hwpToHwpx
|
|
75
|
-
} from "./chunk-B2VRTOQZ.js";
|
|
76
|
-
import {
|
|
77
|
-
DEFAULT_REDACT_RULES,
|
|
78
|
-
redactMarkdown,
|
|
79
|
-
redactText
|
|
80
|
-
} from "./chunk-3WSNLH4B.js";
|
|
81
|
-
import {
|
|
82
|
-
blocksToChunks
|
|
83
|
-
} from "./chunk-MTSWWXSB.js";
|
|
56
|
+
} from "./chunk-ORIA2IFK.js";
|
|
84
57
|
import {
|
|
85
58
|
blocksToPdf,
|
|
86
59
|
extractRenderedRegions,
|
|
@@ -91,25 +64,16 @@ import {
|
|
|
91
64
|
renderHwp5Pages,
|
|
92
65
|
renderHwpxToSvg,
|
|
93
66
|
renderSceneToHtml
|
|
94
|
-
} from "./chunk-
|
|
95
|
-
import "./chunk-ONCXLQV4.js";
|
|
96
|
-
import "./chunk-T7K3CLXM.js";
|
|
97
|
-
import "./chunk-DRDW5ULI.js";
|
|
98
|
-
import "./chunk-VKVDMH7X.js";
|
|
99
|
-
import "./chunk-LM7LYH54.js";
|
|
100
|
-
import "./chunk-J42O5KBX.js";
|
|
101
|
-
import "./chunk-VQFA55IC.js";
|
|
67
|
+
} from "./chunk-ONL4UTGQ.js";
|
|
102
68
|
import {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
import "./chunk-H7K5YHWQ.js";
|
|
112
|
-
import "./chunk-JIMG76FW.js";
|
|
69
|
+
blocksToPages
|
|
70
|
+
} from "./chunk-MLXVSAR3.js";
|
|
71
|
+
import {
|
|
72
|
+
extractClickHereFields,
|
|
73
|
+
patchHwp,
|
|
74
|
+
patchHwpx
|
|
75
|
+
} from "./chunk-OBZV23UV.js";
|
|
76
|
+
import "./chunk-P4OK4W2F.js";
|
|
113
77
|
import {
|
|
114
78
|
AGENCY_COMMON_NAME,
|
|
115
79
|
PRESET_ALIAS,
|
|
@@ -119,7 +83,24 @@ import {
|
|
|
119
83
|
markdownToHwpx,
|
|
120
84
|
normalizeGongmunPreset,
|
|
121
85
|
placeTotalRow
|
|
122
|
-
} from "./chunk-
|
|
86
|
+
} from "./chunk-6MTH2EYN.js";
|
|
87
|
+
import {
|
|
88
|
+
SPACE_EM_FIXED,
|
|
89
|
+
SPACE_EM_FONT,
|
|
90
|
+
charWidthEm1000,
|
|
91
|
+
fitRatioForFewerLines,
|
|
92
|
+
measureTextWidth,
|
|
93
|
+
simulateWrap,
|
|
94
|
+
simulateWrapKeepWord
|
|
95
|
+
} from "./chunk-UJFT2OED.js";
|
|
96
|
+
import {
|
|
97
|
+
addMemoHwpx
|
|
98
|
+
} from "./chunk-SORWBCEP.js";
|
|
99
|
+
import {
|
|
100
|
+
placeSealHwpx
|
|
101
|
+
} from "./chunk-5PONVN46.js";
|
|
102
|
+
import "./chunk-OYIGWP2N.js";
|
|
103
|
+
import "./chunk-3NZP2VXB.js";
|
|
123
104
|
import {
|
|
124
105
|
ValueCursor,
|
|
125
106
|
applySplices,
|
|
@@ -133,28 +114,47 @@ import {
|
|
|
133
114
|
isLabelCell,
|
|
134
115
|
scanSectionXml
|
|
135
116
|
} from "./chunk-3AHL6YEA.js";
|
|
117
|
+
import "./chunk-XQPF6I6P.js";
|
|
136
118
|
import {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
simulateWrap,
|
|
143
|
-
simulateWrapKeepWord
|
|
144
|
-
} from "./chunk-LWSMZJLR.js";
|
|
145
|
-
import "./chunk-TQBNSAAS.js";
|
|
119
|
+
convertToHwpx,
|
|
120
|
+
hwpToHwpx
|
|
121
|
+
} from "./chunk-ONC5LWD4.js";
|
|
122
|
+
import "./chunk-UQTQXXHU.js";
|
|
123
|
+
import "./chunk-VKVDMH7X.js";
|
|
146
124
|
import "./chunk-OFVHQ2TZ.js";
|
|
125
|
+
import "./chunk-UQ2ZA3X4.js";
|
|
147
126
|
import "./chunk-WFKFG2RT.js";
|
|
148
|
-
import
|
|
127
|
+
import {
|
|
128
|
+
DEFAULT_REDACT_RULES,
|
|
129
|
+
redactMarkdown,
|
|
130
|
+
redactText
|
|
131
|
+
} from "./chunk-3WSNLH4B.js";
|
|
132
|
+
import {
|
|
133
|
+
blocksToChunks
|
|
134
|
+
} from "./chunk-FA3MQGIF.js";
|
|
135
|
+
import "./chunk-IDCU74H5.js";
|
|
136
|
+
import "./chunk-VQFA55IC.js";
|
|
137
|
+
import {
|
|
138
|
+
detectFormat,
|
|
139
|
+
detectOle2Format,
|
|
140
|
+
detectZipFormat,
|
|
141
|
+
isHwpxFile,
|
|
142
|
+
isOldHwpFile,
|
|
143
|
+
isPdfFile,
|
|
144
|
+
isZipFile
|
|
145
|
+
} from "./chunk-GHHVT4Q5.js";
|
|
146
|
+
import "./chunk-H7K5YHWQ.js";
|
|
147
|
+
import "./chunk-JIMG76FW.js";
|
|
148
|
+
import "./chunk-RLED4WS3.js";
|
|
149
149
|
import {
|
|
150
150
|
blocksToMarkdown,
|
|
151
151
|
flattenLayoutTables,
|
|
152
152
|
hasStructuredCellContent
|
|
153
|
-
} from "./chunk-
|
|
153
|
+
} from "./chunk-MSRDRUOV.js";
|
|
154
154
|
import "./chunk-KFF47XZ7.js";
|
|
155
155
|
import {
|
|
156
156
|
VERSION
|
|
157
|
-
} from "./chunk-
|
|
157
|
+
} from "./chunk-LAKPAL53.js";
|
|
158
158
|
export {
|
|
159
159
|
AGENCY_COMMON_NAME,
|
|
160
160
|
BUILTIN_TEMPLATES,
|
|
@@ -268,4 +268,4 @@ export {
|
|
|
268
268
|
usesLogicStructure,
|
|
269
269
|
validateHwpx
|
|
270
270
|
};
|
|
271
|
-
//# sourceMappingURL=-
|
|
271
|
+
//# sourceMappingURL=-LPQSUCWH.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
KordocError
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-LAKPAL53.js";
|
|
5
5
|
|
|
6
6
|
// src/roundtrip/zip-patch.ts
|
|
7
7
|
import { deflateRawSync } from "zlib";
|
|
@@ -233,4 +233,4 @@ export {
|
|
|
233
233
|
readZipEntries,
|
|
234
234
|
patchZipEntries
|
|
235
235
|
};
|
|
236
|
-
//# sourceMappingURL=chunk-
|
|
236
|
+
//# sourceMappingURL=chunk-3NZP2VXB.js.map
|
|
@@ -34,7 +34,7 @@ import {
|
|
|
34
34
|
splitRowBands,
|
|
35
35
|
starRun,
|
|
36
36
|
tallInkCount
|
|
37
|
-
} from "./chunk-
|
|
37
|
+
} from "./chunk-XVWPMKPH.js";
|
|
38
38
|
import {
|
|
39
39
|
validateOcrOptions
|
|
40
40
|
} from "./chunk-IFWGHRCQ.js";
|
|
@@ -44,7 +44,7 @@ import {
|
|
|
44
44
|
import {
|
|
45
45
|
KordocError,
|
|
46
46
|
OPTIONAL_DEP_INSTALL_HINT
|
|
47
|
-
} from "./chunk-
|
|
47
|
+
} from "./chunk-7F42AI4O.js";
|
|
48
48
|
|
|
49
49
|
// src/ocr/ocr-stacked-rows.ts
|
|
50
50
|
var NUMERIC = /^[-+−△▲▽▼]?[\d.,]+[%p]?$|^[-–—·∼~]$|^\([-+−△▲▽▼]?[\d.,]+\)$/;
|
|
@@ -2311,6 +2311,7 @@ function groupOcrLines(items, figureRegion = false) {
|
|
|
2311
2311
|
function ocrItemsToBlocks(items, pageNumber, pdfW, pdfH, scale, extraLines, detectTables = true, opList = { fnArray: [], argsArray: [] }, figureRegion = false) {
|
|
2312
2312
|
const bottoms = items.map((it) => it.y + it.h);
|
|
2313
2313
|
const xs = items.map((it) => ({ x: it.x, r: it.x + it.w, space: false }));
|
|
2314
|
+
const texts = items.map((it) => it.text);
|
|
2314
2315
|
for (const line of groupOcrLines(items, figureRegion)) {
|
|
2315
2316
|
if (line.length < 2) continue;
|
|
2316
2317
|
const sorted = line.map((j) => items[j].y + items[j].h).sort((a, b) => a - b);
|
|
@@ -2319,6 +2320,13 @@ function ocrItemsToBlocks(items, pageNumber, pdfW, pdfH, scale, extraLines, dete
|
|
|
2319
2320
|
for (let k = 1; k < byX.length; k++) {
|
|
2320
2321
|
const L = xs[byX[k - 1]], R = xs[byX[k]];
|
|
2321
2322
|
if (R.x >= L.r) continue;
|
|
2323
|
+
const lt = [...texts[byX[k - 1]]], rt = [...texts[byX[k]]], per = items[byX[k]].w / Math.max(1, rt.length);
|
|
2324
|
+
for (let n = Math.min(3, rt.length, lt.length); n >= 1; n--) {
|
|
2325
|
+
if (lt.slice(-n).join("") === rt.slice(0, n).join("") && /[가-힣]/.test(rt[0]) && L.r - R.x >= per * n * 0.5) {
|
|
2326
|
+
texts[byX[k]] = rt.slice(n).join("");
|
|
2327
|
+
break;
|
|
2328
|
+
}
|
|
2329
|
+
}
|
|
2322
2330
|
const mid = (R.x + L.r) / 2, half = Math.min(items[byX[k - 1]].h, items[byX[k]].h) * 0.15;
|
|
2323
2331
|
L.r = Math.max(L.x + 1, mid - half);
|
|
2324
2332
|
R.x = Math.min(R.r - 1, mid + half);
|
|
@@ -2328,7 +2336,7 @@ function ocrItemsToBlocks(items, pageNumber, pdfW, pdfH, scale, extraLines, dete
|
|
|
2328
2336
|
const norm = items.map((it, i) => {
|
|
2329
2337
|
const h = (figureRegion ? Math.max(1, bottoms[i] - it.y) : it.h) / scale;
|
|
2330
2338
|
const normalized = {
|
|
2331
|
-
text:
|
|
2339
|
+
text: texts[i],
|
|
2332
2340
|
x: Math.round(xs[i].x / scale),
|
|
2333
2341
|
// NormItem.y 는 pdfjs transform[5] = 베이스라인 (bottom-up) — 잉크 하단으로 근사
|
|
2334
2342
|
y: Math.round(pdfH - bottoms[i] / scale),
|
|
@@ -2342,8 +2350,50 @@ function ocrItemsToBlocks(items, pageNumber, pdfW, pdfH, scale, extraLines, dete
|
|
|
2342
2350
|
};
|
|
2343
2351
|
copyOcrTextGaps(it, normalized, 1 / scale);
|
|
2344
2352
|
return normalized;
|
|
2345
|
-
});
|
|
2346
|
-
|
|
2353
|
+
}).filter((it) => it.text);
|
|
2354
|
+
const blocks = unframeOcrLayoutTables(splitStackedOcrRows(extractPageBlocksWithLines(norm, pageNumber, opList, pdfW, pdfH, extraLines, detectTables)), pdfH);
|
|
2355
|
+
if (!figureRegion) markOcrHeadings(blocks);
|
|
2356
|
+
return blocks;
|
|
2357
|
+
}
|
|
2358
|
+
function markOcrHeadings(blocks) {
|
|
2359
|
+
const sized = blocks.filter((b) => b.type === "paragraph" && b.text && b.style?.fontSize);
|
|
2360
|
+
const weights = sized.map((b) => [b.style.fontSize, b.text.length]);
|
|
2361
|
+
const total = weights.reduce((n, [, w]) => n + w, 0);
|
|
2362
|
+
if (total < 100) return;
|
|
2363
|
+
weights.sort((a, b) => a[0] - b[0]);
|
|
2364
|
+
let acc = 0, body = 0;
|
|
2365
|
+
for (const [size, w] of weights) {
|
|
2366
|
+
acc += w;
|
|
2367
|
+
if (acc >= total / 2) {
|
|
2368
|
+
body = size;
|
|
2369
|
+
break;
|
|
2370
|
+
}
|
|
2371
|
+
}
|
|
2372
|
+
if (!body) return;
|
|
2373
|
+
for (const b of sized) {
|
|
2374
|
+
const text = b.text.trim(), size = b.style.fontSize;
|
|
2375
|
+
const ratio = size / body;
|
|
2376
|
+
if (ratio < 1.3) continue;
|
|
2377
|
+
if (text.length < 2 || text.length > (ratio >= 1.5 ? 60 : 40) || /[.!?。]$|다\.?$/.test(text) || /^[\d\s.,%·-]+$/.test(text)) continue;
|
|
2378
|
+
if (b.bbox && b.bbox.height > size * (ratio >= 1.5 ? 3.2 : 1.6)) continue;
|
|
2379
|
+
b.type = "heading";
|
|
2380
|
+
b.level = ratio >= 1.5 ? 1 : 2;
|
|
2381
|
+
}
|
|
2382
|
+
for (let i = blocks.length - 1; i > 0; i--) {
|
|
2383
|
+
const a = blocks[i - 1], b = blocks[i];
|
|
2384
|
+
if (a.type !== "heading" || b.type !== "heading" || !a.bbox || !b.bbox) continue;
|
|
2385
|
+
const marker = /^(?:제\s*\d+\s*[장절편부]|chapter\s*\d+|part\s*\d+)$/i.test(a.text.trim());
|
|
2386
|
+
const sa = a.style?.fontSize ?? 0, sb = b.style?.fontSize ?? 0;
|
|
2387
|
+
if (!marker && (a.level !== b.level || Math.max(sa, sb) > Math.min(sa, sb) * 1.3)) continue;
|
|
2388
|
+
const gap = a.bbox.y - (b.bbox.y + b.bbox.height), size = Math.max(a.style?.fontSize ?? 0, b.style?.fontSize ?? 0);
|
|
2389
|
+
const across = Math.min(a.bbox.x + a.bbox.width, b.bbox.x + b.bbox.width) - Math.max(a.bbox.x, b.bbox.x);
|
|
2390
|
+
if (gap < 0 || gap > size * (marker ? 3 : 1.2) || across <= 0) continue;
|
|
2391
|
+
a.level = Math.min(a.level ?? 2, b.level ?? 2);
|
|
2392
|
+
a.text = `${a.text.trim()} ${b.text.trim()}`;
|
|
2393
|
+
const x = Math.min(a.bbox.x, b.bbox.x);
|
|
2394
|
+
a.bbox = { ...a.bbox, x, y: b.bbox.y, width: Math.max(a.bbox.x + a.bbox.width, b.bbox.x + b.bbox.width) - x, height: a.bbox.y + a.bbox.height - b.bbox.y };
|
|
2395
|
+
blocks.splice(i, 1);
|
|
2396
|
+
}
|
|
2347
2397
|
}
|
|
2348
2398
|
async function tryImport2(name, loader) {
|
|
2349
2399
|
try {
|
|
@@ -2397,6 +2447,7 @@ export {
|
|
|
2397
2447
|
runPdfOcr,
|
|
2398
2448
|
ocrOnePage,
|
|
2399
2449
|
groupOcrLines,
|
|
2400
|
-
ocrItemsToBlocks
|
|
2450
|
+
ocrItemsToBlocks,
|
|
2451
|
+
markOcrHeadings
|
|
2401
2452
|
};
|
|
2402
|
-
//# sourceMappingURL=chunk-
|
|
2453
|
+
//# sourceMappingURL=chunk-5IYRVLGJ.js.map
|