문서 표 데이터 추출: 재사용 전에 머리글·셀·원문 근거 보존하기
문서 표 데이터 추출은 원문 표의 행, 열, 셀 내용을 재구성하여 검토하거나 재사용할 수 있게 하는 작업입니다. 파싱한 값을 제안하기 전에 각 값에 연결된 머리글, 표기된 단위, 각주를 보존합니다. 문자를 정확히 읽었더라도 잘못된 열에 넣었다면 재구성은 잘못된 것입니다.
기능 상태: 문서화됨. Docling과 Structured Output은 카탈로그에 문서화되어 있습니다. 다만 여기서 설명하는 재구성 절차는 Ai Flowi가 운영 환경에서 테스트하지 않았으며, 결합된 워크플로우의 실행 결과도 기록되어 있지 않습니다.
작성: Ai Flowi · 게시일
공식 출처: Docling 문서
업무 필드를 해석하기 전에 표 구조부터 확인하기
검토하는 동안 원문, 표 식별명, 버전을 계속 확인할 수 있도록 유지합니다. 페이지 표기, 표 제목, 행 키, 머리글 경로처럼 검토자가 실제로 찾을 수 있는 원문 위치를 기록합니다. 이 실습에서는 이러한 기준점을 수동으로 지정하며, 자동으로 생성된 레이아웃 좌표가 아닙니다.
문서에서 명명된 필드를 선택하는 작업은 Document AI 가이드에서 다룹니다. 여기서는 그보다 먼저 표 구조를 보존합니다. 표기된 셀에 어떤 머리글이 적용되는지, 셀이 비어 있는지, 주석이 단위를 바꾸는지 확인합니다. 전체 컴포넌트 인터페이스는 Docling 연동 참조 문서에서 다룹니다.
원문이 이미 신뢰할 수 있는 구조화된 표라면, 이를 다시 만들기 위해 OCR이나 모델을 추가하기보다 기존 구조를 보존합니다. PDF나 이미지의 경우, 선택한 읽기 방식이 사용이 허용된 샘플에서 검토 가능한 내용을 생성하는지 먼저 확인합니다. OCR 설정이 있다는 사실만으로 해당 파일이 지원된다고 볼 수는 없습니다.
관련 자료: Unstructured.io 사용법: AI Flowi Workflow 연동.
세 행으로 구성된 가상 원문 확인하기
이 가상의 제안 카드에는 SOURCE-CARD-A, 표 A, 버전 2라는 식별 정보가 있습니다. 병합된 가격 머리글은 두 가격 열 모두에 적용됩니다. R-B의 수정 가격 셀은 비어 있어 숫자가 표기되어 있지 않으며, R-C의 0 값은 명시적으로 표기되어 있습니다.
휴대전화에서는 두 표 모두 각각의 영역 안에서 스크롤할 수 있습니다. 키보드로 영역에 포커스를 주면 처음에 보이지 않는 열을 확인할 수 있습니다.
| 행 키 | 팩 수량 (팩당 품목 수) | 가격(팩당 RM) | |
|---|---|---|---|
| 정가 | 수정 가격 | ||
| R-A | 12 | 24.00 | 22.00 |
| R-B | 6* | 18.00 | |
| R-C | 1 | 0.00 | 0.00 |
원문 각주 *: R-B에 한해 팩 수량은 팩당 내부 상자 수를 뜻하며, 각 내부 상자에는 품목 네 개가 들어 있습니다.
따라서 R-B에 표기된 것은 개별 품목 여섯 개가 아니라 내부 상자 여섯 개입니다. 팩당 품목 스물네 개라는 값은 각주에서 별도로 계산한 결과이지 추출된 셀 값이 아닙니다. 파싱한 수량의 제안 값은 6으로 유지하고 단위를 팩당 내부 상자 수로 기록하며, 각주에 명시된 조건도 보존합니다.
셀 재구성 검토표 복사하기
표를 평탄화해도 머리글과 원문 근거가 남도록 셀마다 하나의 레코드를 사용합니다. 아래 머리글은 복사해서 쓰는 검토 자료이며, 업로드 형식이나 기본 output_schema 정의로 제공되는 것이 아닙니다.
source_ref | table_ref | source_version | source_locator | header_path | row_key | printed_cell | printed_unit | proposed_parsed_value | cell_state | footnote | review_decision
이 예시 정책에서는 present, blank, unreadable, not_supplied를 서로 다른 검토표 상태로 사용합니다. 빈칸은 원문에서 비어 있는 셀이 보인다는 뜻이고, 판독 불가는 셀은 있지만 문자를 확정할 수 없다는 뜻입니다. 미제공은 필요한 원문 영역이 검토 자료에 포함되지 않았다는 뜻입니다. 어느 상태도 0을 입력할 근거가 되지 않습니다.
| 행 / 머리글 경로 | 표기된 셀 | 제안 값 / 단위 | 상태 및 검토 |
|---|---|---|---|
| R-A / 팩 수량 | 12 | 12 / 팩당 품목 수 | 값 있음. 수량 머리글과 비교합니다. |
| R-A / 가격 → 정가 | 24.00 | 24.00 / 팩당 RM | 값 있음. 두 단계의 머리글을 모두 유지합니다. |
| R-A / 가격 → 수정 가격 | 22.00 | 22.00 / 팩당 RM | 값 있음. 수정 가격과 정가를 구분합니다. |
| R-B / 팩 수량 | 6* | 6 / 팩당 내부 상자 수 | 값 있음. 단위를 승인하기 전에 각주 *를 연결합니다. |
| R-B / 가격 → 정가 | 18.00 | 18.00 / 팩당 RM | 값 있음. 각주를 이유로 가격을 환산하지 않습니다. |
| R-B / 가격 → 수정 가격 | 원문의 빈 셀 | 제안할 숫자 값 없음 | 빈칸. 가격은 계속 확인할 수 없는 상태입니다. |
| R-C / 팩 수량 | 1 | 1 / 팩당 품목 수 | 값 있음. R-B의 단위 예외를 적용하지 않습니다. |
| R-C / 가격 → 정가 | 0.00 | 0.00 / 팩당 RM | 값 있음. 원문에 표기된 0을 그대로 기록합니다. |
| R-C / 가격 → 수정 가격 | 0.00 | 0.00 / 팩당 RM | 값 있음. R-B의 빈칸과 구분합니다. |
위의 원문 표는 이러한 목표값을 확인하는 독립적인 기준입니다. 목표값은 사람이 작성한 기대 결과이며, 표 추출기에서 수집한 출력이 아닙니다. 세 행의 키와 두 단계의 가격 머리글도 보존합니다. 셀 레코드 아홉 개가 겉보기에는 정확하더라도 행 식별 정보가 뒤바뀌었다면 올바른 재구성이 아닙니다.
읽고 검토한 뒤 승인된 텍스트 구조화하기
설정 예시이며, 기록된 테스트가 아닙니다
사용이 허용된 원문 파일과 원본을 검토표 옆에 보관합니다. 별도로 요금이 청구되는 모델 제공업체 계정과 API 키는 모델 연결 참조 문서를 통해 직접 준비합니다.
- 기본 처리 설정은 Docling 설정 예시를 따릅니다.
- 이 표 구조 검토에서는 Docling의
do_picture_classification를 false로 설정합니다. Table로 선언된dataframe에서 R-A, R-B, R-C와 두 단계의 가격 머리글을 확인합니다. 분류 설정 자체는 셀을 승인할 근거를 제공하지 않습니다. - 재구성된 모든 셀, 머리글, 각주를 원본과 비교합니다. 원문 위치를 포함한 검토표 텍스트를 수동으로 작성하고 검토합니다. 행과 열의 관계를 보존할 수 없다면 중단합니다.
- 검토한 텍스트를 Structured Output의 필수 입력인
input_value에 넣습니다. Docling의 Table 출력을 이 Message 호환 텍스트 입력에 직접 연결할 수 있다고 선언되어 있지는 않습니다. 이 제안에서는 의도적으로 사람이 데이터를 전달합니다. - 필수 설정은 Structured Output 설정 참조 문서를 따라
model과output_schema을 구성합니다.cell_reconstruction이라는 검토표 스키마 이름을schema_name으로 지정하고, 아래 셀 보존 지침을 필수 입력인system_prompt에 넣습니다. structured_outputJSON과dataframe_outputTable에서 셀 레코드 아홉 개가 각각 존재하는지 확인합니다. R-B의 수정 가격은 빈칸으로 남아야 하고, R-C의 두 가격은 표기된 0을 유지해야 합니다. 각 표현 형식에서header_path와footnote가 어떻게 보존되는지 확인합니다. 검토표의 파이프 구분 텍스트는 가져올 수 있는 스키마가 아닙니다.
Represent only the supplied reviewed cell records. Preserve source version,
row key, complete header path, printed cell, unit, footnote and source locator.
Keep blank, unreadable and not-supplied states distinct from printed zero.
Do not fill missing prices, detach unit exceptions or turn derived quantities
into extracted values. Keep unresolved cells awaiting source review.
각 가격 머리글은 독립된 이름이 아니라 경로로 읽습니다. 가격 머리글은 팩당 RM이라는 단위를 제공하고, 정가 또는 수정 가격 머리글은 해당 금액을 선택합니다. 두 값을 하나의 가격 필드로 평탄화하면 R-A의 24.00과 22.00을 구분할 수 없게 됩니다. 행별로, 머리글 경로별로 누락 여부를 따로 확인합니다. R-A의 정가 레코드가 중복되면 전체 레코드 수는 아홉 개여도 R-B의 정가 셀이 빠질 수 있습니다. 레코드 수만으로 검토표를 승인할 수는 없습니다.
PDF나 이미지에서 표를 추출할 때 확인할 사항
읽을 수 있는 텍스트가 포함된 PDF에서는 읽기 순서 때문에 병합 머리글이 평탄화되거나 각주가 인접한 행으로 옮겨지는지 확인합니다. 이미지나 스캔된 PDF에서는 OCR 후 숫자, 소수점, 열 경계, 각주 표시를 확인합니다. 오른쪽 열이 잘려 있다면 미제공으로 표시하고, 금액은 보이지만 읽을 수 없다면 판독 불가로 표시합니다.
이 테스트 예시에서 18.00을 수정 가격 열로 옮기거나, RM 머리글을 삭제하거나, 빈 셀을 0.00으로 바꾸거나, 6*의 별표를 제거해 봅니다. 구조화된 출력이 정상적으로 파싱되더라도 이러한 변형은 모두 원문 비교에서 불합격해야 합니다. 각주가 없으면 R-B의 수량 단위를 승인할 수 없습니다. 그렇다고 일반적인 열 단위로 되돌려 적용해도 되는 것은 아닙니다.
이 검토 항목은 예상되는 실패를 정의하며, 측정된 통과율을 제시하지 않습니다. 카탈로그는 이 설정의 자동 좌표 보존, 보정된 정확도, 지원되는 OCR 설치 환경, Excel 내보내기를 입증하지 않습니다. 이 글은 온라인 추출 도구 대신 검토표를 제공합니다.
후속 재사용 전에 표 구조 승인하기
누가 표 구조를 비교했는지, 어떤 원문 버전을 확인했는지, 미해결 셀이 무엇인지 기록합니다. 소수점 표기 형식이 바뀌는 경우 파싱한 제안 값과 원문에 표기된 근거를 구분하여 보관합니다. 다음 단계인 필드 의미 합의에는 데이터 사전 템플릿을 사용하고, 이후 식별 정보와 변환 결과를 대조·확인할 때는 ETL 테스트를 활용합니다.
검토하지 않은 재구성 결과를 합계, 주문, 자동 의사결정에 사용하지 않습니다. 원문 수정본이 도착하면 이전 근거를 보존하고 새 버전을 검토합니다. 파싱한 값만 수정해서는 원문에서 무엇이 달라졌는지 확인할 수 없습니다.
요금제: Go 연간 결제 시 월 USD8부터(월간 USD10), Plus 월 USD16부터(월간 USD20), Pro 100 월 USD80부터(월간 USD100), Pro 200 월 USD160부터(월간 USD200), Pro 500 월 USD400부터(월간 USD500). 매월 5,000~250,000 Flowi Tokens가 제공되며 충전도 가능합니다. 노드 실행 1회당 1토큰, 타사 API 및 모델 사용 요금은 포함되지 않습니다.