오픈소스 파서 조사
방법론·지원 형식·출력항목·실행조건을 조사하고 비교 후보를 선별합니다.
산출 · 후보 파서 선정표파서 조사에서 후보를 고르고, 제공 문서를 형식·상태·정보유형으로 나눈 뒤 정확도와 운영성을 평가합니다. 그 결과로 권장 라우팅과 공통 스키마를 정합니다.
24개 Silver 단위로 실험 구조와 라우팅 가설을 확인했습니다. 최종 순위는 합의된 Human Gold 본실험 뒤 확정합니다.
기술조사는 비교할 파서를 정하고, 샘플 실험은 파서의 정확도와 운영성을 측정합니다. 결과 분석은 그 근거를 권장 조합과 공통 스키마로 바꾸는 단계입니다.
방법론·지원 형식·출력항목·실행조건을 조사하고 비교 후보를 선별합니다.
산출 · 후보 파서 선정표같은 평가단위에 호환 파서를 적용해 정확도·속도·메모리를 측정합니다.
산출 · 모달리티별 성능표성능과 출력항목을 함께 분석해 파서 조합과 공통 저장 구조를 정합니다.
산출 · 라우팅안 + 스키마 명세원본 구조, OCR, 구조 복원, VLM 보완을 각각 대표하는 기준선을 구성했습니다. 지식그래프는 원시문서를 읽는 파서가 아니므로 관계 추출 후처리로, 상용 2종은 출력항목 참조로 분리했습니다.
| 방법군 | 실험 역할 | 조사 후보 | 현재 파일럿 | 선정 기준 |
|---|---|---|---|---|
| 원본 형식 파서 | 파일 내부 구조를 직접 읽는 기준선 | pyhwp · hwplib · syhwp · HWPX XML · Poppler · openpyxl | HWP Native · syhwp · HWPX Native · Poppler · openpyxl | 형식 지원 · 객체 구조 · 로컬 실행 |
| OCR | 스캔·이미지 문자의 최소 기준선 | Tesseract · PaddleOCR | Tesseract · PaddleOCR | 한국어 · 좌표 · 회전문자 · 자원 |
| 하이브리드 구조형 | 레이아웃·표·읽기순서 복원 | Docling · PP-StructureV3 · MinerU Pipeline | Docling · PP-Structure · MinerU Pipeline | 객체·표·셀 · 공통 JSON 변환 가능성 |
| Document VLM | 수식·복합표·도면 난영역 보완 | PaddleOCR-VL · MinerU VLM · GLM-OCR · Marker | PaddleOCR-VL 파일럿 · 영역 보완 경로 | A100 실행 · 작은 글자 · 구조 출력 · 비용 |
| 지식그래프 변환 | 파싱 객체에서 관계·트리플 생성 | 규칙·LLM 관계 추출 + RDF/Property Graph | 공통 relation 필드와 Triple F1 설계 | 원문 파서가 아니므로 별도 후처리 평가 |
| 상용 참조 | 오픈소스 대비 출력항목 수준 확인 | 사이냅 도큐애널라이저 · 한컴 데이터로더 | 제공 JSON 69건 필드 매핑 | 동일 실행환경이 없어 정확도·속도 순위 제외 |
전체자료는 문서유형·형식·페이지 상태 분포와 운영 범위를 확인하는 모집단입니다. 사람 정답이 필요한 정확도 평가는 대표 상태를 담은 작은 표본에서만 수행했습니다.
| 문서유형 | HWP | HWPX | TIFF | Excel | 합계 | |
|---|---|---|---|---|---|---|
| 감리보고서 | 337 | 1 | 44 | 36 | 0 | 418 |
| 설계보고서 | 69 | 0 | 32 | 10 | 0 | 111 |
| 민원공문 | 40 | 0 | 50 | 0 | 0 | 90 |
| 공사사진대지 | 100 | 0 | 100 | 0 | 80 | 280 |
| 공사시방서 | 32 | 0 | 37 | 31 | 0 | 100 |
| 합계 | 578 | 1 | 263 | 77 | 80 | 999 |
전체 입력층999문서
5개 문서유형 · 5개 형식군정확도 파일럿Silver 24단위
HWP 6 · PDF 11 · TIFF 7본실험 Goldcalibration 4 · blind 20
2인 독립 작성·제3자 조정 예정별도 비교층변환쌍·상용 출력
HWP↔PDF 20쌍 · 상용 JSON 69건같은 원본에서 나온 파일과 변환본은 개발·평가 양쪽에 나누지 않아 데이터 누수를 막았습니다.
정확도 표본은 문서유형×파일형식×입력상태×정보유형을 조합해 선정합니다. 모든 객체를 모든 단위에 강제로 라벨링하지 않고, 해당 단위에 실제 존재하는 모달리티만 채점합니다.
감리 · 설계 · 민원 · 사진대지 · 시방서
HWP · HWPX · PDF · TIFF · Excel
디지털 · 텍스트 없음 · 희소 · 저품질
본문 · 표 · 서식 · 사진 · 수식 · 도면
대표 단위에 사람 정답을 만들고, 같은 범위의 파서 출력을 객체별로 채점합니다.
현재 Silver 24 → Human Gold 본실험장문·대용량 입력을 반복 실행해 성공률, usable 출력, 시간과 메모리를 기록합니다.
cold 단발 + warm 3회 반복같은 HWP의 직접 파싱 결과와 PDF 변환 후 결과를 정렬해 누락·변형을 비교합니다.
HWP↔PDF 대응쌍 20개오픈소스 RAW와 상용 JSON을 공통 필드에 매핑하고 표현 불가능한 항목을 찾습니다.
상용 JSON 69건 포함파서는 파일 전체를 받을 수 있지만, 정확도는 같은 페이지·논리구간·영역·객체 범위로 맞춘 뒤 비교합니다.
| 형식 | 파서 입력 | 나누는 상태·경로 | 정확도 채점 단위 |
|---|---|---|---|
| HWP | HWP 파일 1개 | 원본 직접 파싱 / PDF 변환 | 동일 논리구간의 객체·셀 |
| HWPX | HWPX 파일 1개 | XML 원본 / 렌더 보완 | section 내부 객체 |
| PDF+page index 또는 렌더 이미지 | 디지털 / 텍스트 없음 / 희소 / 복합표 | 페이지 → 영역 → 객체 | |
| TIFF | 분리한 frame 이미지 | 일반 / 표·서식 / 도면 난영역 | 프레임 → 영역 → 객체 |
| Excel | 통합문서 | 셀 구조 / 사진·캡션 배치 | 시트 → 셀·이미지 |
텍스트, 표, 관계처럼 정답 형태가 다른 항목은 각자 맞는 지표로 평가하고, 속도와 메모리는 별도 표로 비교합니다.
| 평가 대상 | Gold 또는 기록값 | 지표 | 무엇을 판단하는가 |
|---|---|---|---|
| 텍스트·필드값 | 정규화 문자열·중요값 | CER · EM · Token F1 | 문자와 핵심값 보존 |
| 객체·위치 | 객체 유형·bbox | Object F1 · IoU | 제목·본문·표·이미지 검출 |
| 표 | 행·열·병합셀·셀 문자 | Cell F1 · TEDS · 병합셀 정확도 | 셀 구조와 값 보존 |
| 계층·순서 | parent·level·reading order | Parent · Level · Order Accuracy | 장절 구조와 읽기순서 |
| 객체관계 | source·target·relation | Relation F1 · Triple F1 | 캡션·참조·필드값 연결 |
| 운영성 | 실행 로그 | 성공률 · usable · p50/p95 · RAM/VRAM | 속도·안정성·자원 |
아래 경로의 INPUT은 파서가 실제로 받는 묶음입니다. RAW는 파서 고유 결과이고, COMMON은 비교·DB 적재를 위해 만든 표준 결과입니다.
PDF는 확장자 확인 뒤 페이지마다 native text 상태를 다시 판정했다.
Native·구조형 파서는 원본 PDF와 page index, OCR·VLM은 해당 페이지를 렌더한 PNG 또는 자동 crop을 받는다.
페이지별 common JSON 하나가 생성되고, 그 안에 text·table·cell·relation 객체 여러 개가 들어간다.
앞에서 정의한 동일 평가단위와 Silver 정답으로 핵심 문자열을 채점했습니다. 아래 수치는 실험 설계를 검증한 파일럿이며, Human Gold 본실험의 최종 순위가 아닙니다.
| 입력 상태 | 채점 단위 | Native·경량 | OCR | 구조형 |
|---|---|---|---|---|
| 디지털 PDF | 2쪽 · 15 anchors | Poppler14/15 · 93.3% | Tesseract6/15 · 40.0% | OpenDataLoader14/15 · 93.3% Docling14/15 · 93.3% |
| Native text 없음 PDF | 4쪽 · 30 anchors | Poppler0/30 · 0.0% | PaddleOCR25/30 · 83.3% Tesseract21/30 · 70.0% | PP-Structure25/30 · 83.3% |
| Native text 희소 PDF | 5쪽 · 33 anchors | Poppler6/33 · 18.2% | PaddleOCR28/33 · 84.8% Tesseract18/33 · 54.5% | PP-Structure28/33 · 84.8% |
| TIFF | 7프레임 · 55 anchors | N/A | PaddleOCR42/55 · 76.4% Tesseract25/55 · 45.5% | PP-Structure42/55 · 76.4% |
| HWP 원본 | 6구간 · 39 anchors | HWP Native29/39 · 74.4% | N/A | syhwp33/39 · 84.6% |
디지털 PDFOCR로 다시 읽을 이유가 없었습니다. Native가 더 빠르고 93.3%를 기록했습니다.
텍스트 없음·희소 PDFNative 단독은 0.0%·18.2%, Paddle 계열은 83.3%·84.8%였습니다.
HWP·TIFF원본 구조와 이미지 좌표의 차이를 보존해야 같은 축에서 정직하게 비교됩니다.
별도 Silver 12단위·88 anchors에서 저비용, 상태별 단일, 구조 보완 정책의 품질과 비용을 같이 봤습니다.
Native + Tesseract 중심
형식·페이지 상태로 한 파서 선택
Docling 또는 PP-Structure+OCR 병합
| 정책 | Object F1 | 행·열 exact | Relation F1 | 순차 wall | RSS 하한 |
|---|---|---|---|---|---|
| R0 | 0.000 · N=2 | 0.000 · N=2 | 0.000 · N=2 | 26.230초 | 156.9 MiB |
| R1 | 0.000 · N=2 | 0.000 · N=2 | 0.000 · N=2 | 45.415초 | 2,300.8 MiB |
| R2 | 0.478 · N=12 | 0.250 · N=12 | 0.296 · N=12 | 164.793초 | 2,972.4 MiB |
R0·R1의 구조 지표는 적용 단위가 2개뿐입니다. R2의 N=12와 구조 점수를 직접 순위화하지 않습니다. R0·R1은 기존 실행 선택 simulation입니다.
사람이 자른 표나 정답 bbox는 쓰지 않았습니다. PP-Structure가 표를 찾고, 검출된 영역만 VLM으로 다시 읽어 기존 결과와 병합했습니다.
병목은 VLM보다 표 검출입니다. 검출된 표의 셀은 좋아졌지만 표 검출 8/13과 관계 F1은 개선되지 않았습니다.
| 조건 | Anchor | 표 검출 | Object F1 | Cell | Topology | Relation |
|---|---|---|---|---|---|---|
| 전체 렌더 VLM Spotting | 108/172 · 62.8% | N/A | 0.0% | 0/76 · 0.0% | 0/6 · 0.0% | 0.0% |
| PP-Structure 단독 | 146/172 · 84.9% | 8/13 · 61.5% | 25.6% | 17/76 · 22.4% | 1/6 · 16.7% | 4.2% |
| 자동 PP bbox → VLM → 병합 | 146/172 · 84.9% | 8/13 · 61.5% | 25.6% | 26/76 · 34.2% | 2/6 · 33.3% | 3.8% |
Spotting의 구조 점수 0은 모델 일반 능력의 0점이 아니라 text-span만 내는 현재 출력 계약의 결과입니다.
처리시간과 메모리는 정확도와 분리했습니다. 페이지·프레임·section은 작업량이 달라 서로 다른 행의 속도를 종합 순위로 비교하지 않습니다.
| 입력 | 파서 | usable | wall p50 / p95 | RSS p50 / p95 |
|---|---|---|---|---|
| 디지털 PDF | Poppler | 29/30 | 0.130 / 0.155초 | 16.8 / 17.6 MiB |
| 디지털 PDF | Docling | 29/30 | 9.921 / 15.660초 | 1,136.3 / 1,352.2 MiB |
| 텍스트 없음 PDF | Tesseract | 28/30 | 3.406 / 6.048초 | 143.1 / 152.1 MiB |
| 텍스트 없음 PDF | PaddleOCR | 28/30 | 7.316 / 8.525초 | 2,190.7 / 2,231.2 MiB |
| 텍스트 없음 PDF | PP-Structure | 28/30 | 11.422 / 15.220초 | 2,859.1 / 2,918.3 MiB |
| TIFF | Tesseract | 30/30 | 3.379 / 5.632초 | 144.9 / 154.4 MiB |
| HWP | HWP Native | 30/30 | 0.092 / 0.256초 | 18.7 / 27.8 MiB |
| HWP | syhwp | 30/30 | 0.120 / 0.420초 | 19.3 / 26.7 MiB |
운영 수치는 파일럿 조건의 관측값이며 서비스 SLA, 동시 처리량, 전체 코퍼스 완료시간을 뜻하지 않습니다.
파서마다 JSON 모양과 좌표계가 달라도 raw를 보존하고 adapter로 common-v2에 매핑했습니다. 공통화가 원문에 없는 의미를 새로 만들지는 않습니다.
<word xMin="118" yMin="84" xMax="176" yMax="101">공사명</word>
{
"unit": { "kind": "page", "index": 6 },
"objects": [{
"type": "text_line", "text": "공사명",
"location": { "space": "pdf_point", "bbox": [118,84,176,101] }
}],
"run": { "parser": "poppler_native" }
}실제 실행 출력과 연구원 제공 상용 JSON에서 구조가 드러나는 부분만 비식별·축약했습니다.
선택된 예시: Poppler · bbox-XHTML제공받은 10개 입력의 JSON 69건을 구조 검증했습니다. 사이냅은 페이지 중심, 한컴은 문서 중심 출력이지만 object·text·bbox·cell을 공통 객체로 투영할 수 있었습니다.
| 공통 항목 | 사이냅 도큐애널라이저 | 한컴 데이터로더 | 명세 분류 |
|---|---|---|---|
| 페이지·객체·텍스트·bbox | 지원 | 지원 | 공통 필수 |
| 표 셀 행·열·병합 | 부분 지원 | HWP 지원 · PDF 미관측 | 조건부 |
| 수식 기계판독 표현 | MathML · PDF 부분 | HWP script · PDF 미관측 | 조건부 |
| 캡션과 대상 연결 | 미관측 | 미관측 | 선택·추가 추론 |
| 도면 의미 필드 | 미관측 | 미관측 | 건설 특화 |
| 처리시간·메모리 | 제공값 없음 | 제공값 없음 | 별도 운영실험 |
DB 적재는 구조를 저장할 수 있다는 뜻입니다. 값 정확도나 파서 우위를 뜻하지 않으며, 미관측도 곧바로 제품 미지원은 아닙니다.
방법군별 역할과 지원 형식, 출력항목, 실행조건을 비교해 본실험 후보를 확정합니다.
동일 Gold 채점과 반복 실행 로그를 분리해 문서 상태별 성능과 한계를 제시합니다.
성능이 좋은 경로를 선택하고 상용 2종을 포함한 모든 출력을 공통·조건부 필드로 매핑합니다.
상태별 라우팅 필요성, 표 영역 VLM 보완 효과, 공통 DB 적재 가능성
범용 1등 파서, HWPX 순위, 상용 정확도, Human Gold 최종 성능, 운영 SLA
모든 정확도는 단일 검토자 Silver 파일럿입니다. HWPX는 1건이라 정확도 집계에서 제외했습니다. 객체·관계 라벨은 대표 항목 진단용이며, 2인 Human Gold 작성과 제3자 조정은 아직 시작 전입니다.