Skip to Content

문서에서 정보 추출하기

실습복습
관련 기초 개념

2.1 문서에서 정보 추출하기

세부 학습 목표

  • OCR·레이아웃·필드 추출과 원문·업무 검산의 책임을 구별한다.
  • Content Understanding·Document Intelligence를 입력·출력·근거 요구로 비교한다.
  • JSON/Markdown analyzer와 시험의 single-task/pro 표현을 현재 GA/Preview API 지원과 대조한다.

개요

  • OCR: 문서 이미지에서 문자 인식.
  • 레이아웃: 표의 행·열과 문단·위치 관계 파악.
  • 필드 추출: 주문번호·수량·금액 등 필요한 값 연결.
  • 검증: 원문 일치와 산식·통화·단위 일치를 각각 확인.

스캔 송장을 데이터로 바꾸는 과정

  • 스캔 PDF는 화면에 글자가 보여도 텍스트 선택이 되지 않을 수 있습니다.

    먼저 OCR로 문자를 인식한 뒤 문단·표·행·열 같은 구조를 분석합니다. 다음으로 “거래처”, “품목”, “수량”, “합계”의 의미를 정해 필드에 값을 연결합니다.

  • 같은 12000이라는 숫자도 단가인지 소계인지 문서의 위치와 표 구조에 따라 의미가 달라집니다.

    문자 추출만 성공했다는 이유로 계산에 바로 넣으면 다른 행의 금액을 결합할 수 있습니다. 문서 처리의 검증 단위는 글자 정확도에서 끝나지 않고 필드·구조·업무 관계까지 이어집니다.

단계교육용 송장의 결과확인할 오류
OCR상품 A / 2 / 6000 / 120000과 O 혼동, 글자 누락
레이아웃품목·수량·단가·소계 열행 병합, 열 순서 손실
필드 추출quantity=2, unit_price=6000다른 행의 값 연결
업무 검증2 × 6000 = 12000잘못된 합계, 통화·세금 혼동

CU와 Document Intelligence를 선택하기

  • Document Intelligence는 문서의 OCR·레이아웃과 사전 구축/사용자 지정 모델을 통한 구조·필드 추출을 제공합니다.

    Content Understanding(CU)은 문서뿐 아니라 이미지·음성·영상 분석과 사용자 출력 스키마를 구성하는 흐름을 제공합니다. 입력 종류, 필요한 필드, 구조 보존, 처리 방식과 실제 정확도로 비교합니다.

요구 조건먼저 검토할 후보선택 전에 확인할 결과
송장·양식의 필드와 표를 추출Document Intelligence의 문서 모델필드 정확도·표의 행/열·원문 위치
문서·이미지·음성·영상을 정한 필드로 처리CU analyzer입력별 지원·출력 스키마·근거 정보
두 서비스가 모두 처리할 수 있는 문서같은 표본으로 두 후보 비교필수 필드 누락·잘못된 값·구조 보존·비용
  • 예: 송장의 총액만 필요할 때와 송장·제품 사진을 함께 분석할 때는 비교할 기능이 달라집니다.

    송장만 처리한다면 문서 추출 모델의 결과부터 확인할 수 있습니다. 사진의 제품 상태도 같은 업무 필드로 정리해야 한다면 CU의 해당 입력 지원을 함께 검토합니다. 서비스 이름만으로 결정하지 않고 실제 표본에서 필요한 필드와 근거가 보존되는지 확인합니다.

  • CU의 analyzer는 처리할 콘텐츠와 추출 대상·출력 구조 등을 정하는 재사용 가능한 설정입니다.

    아래는 필드 정의의 형태를 보여 주는 구성 예제입니다. 실제 생성 요청에는 선택한 API 버전과 모델 구성 등 공식 문서의 필수 조건을 확인해야 합니다.

{ "baseAnalyzerId": "prebuilt-document", "description": "송장의 공급자와 합계 추출", "fieldSchema": { "fields": { "supplier": {"type": "string", "description": "공급자 이름"}, "total": {"type": "number", "description": "문서의 최종 합계"} } } }
  • 필드명과 설명은 어떤 값을 원하는지 구체화합니다.

    값이 없을 때의 표현, 여러 통화가 섞일 때의 처리, 합계가 여러 개일 때의 선택 기준은 앱의 계약에 포함합니다. 생성형 추출이 만든 숫자는 원문과 대조하고 결정적 산식으로 다시 계산합니다.

추출값을 검산하는 예제

다음은 서비스 응답 전체가 아닌, 앱이 받은 추출 필드를 정리한 가상 데이터입니다. 로컬에서 실행할 수 있습니다.

from decimal import Decimal item = {"quantity": "2", "unit_price": "6000", "subtotal": "12000"} expected = Decimal(item["quantity"]) * Decimal(item["unit_price"]) actual = Decimal(item["subtotal"]) assert expected == actual print(expected)
  • 금액 계산에는 소수점·통화·반올림 규칙을 명확히 둡니다.

    위 검산이 통과해도 원문에서 수량과 단가를 모두 잘못 읽었을 가능성은 남습니다. 원문 일치와 산식 일치는 각각 확인합니다.

JSON·Markdown과 근거 보존

  • 정해진 필드 처리에는 JSON 구조가, 본문과 표를 검색 문맥으로 읽는 흐름에는 Markdown 같은 표현이 편리할 수 있습니다.

    어느 형식이든 페이지·구간·원문 위치와 문서 버전을 보존해야 값의 출처를 추적할 수 있습니다. 구조를 평문으로 바꿀 때 표의 열 이름과 단위가 사라지지 않는지도 봅니다.

  • 2026년 10월 확인 기준으로 CU의 2025-11-01 API는 GA(일반 공급), 2026-06-01-preview API는 공개 미리 보기입니다.

    문서 분석의 agentic mode와 동기식 Read/Layout(prebuilt-read, prebuilt-layout) 작업은 후자에 속하므로 GA에서 그대로 사용할 수 있는 기능으로 가정하지 않습니다.

  • 시험 가이드의 pro mode 표현은 현재 API와 구분해 읽습니다.

    최신 CU 문서는 이전 pro API 종료와 agentic mode 이전을 안내하며 설정과 지원 입력에 차이가 있습니다. 교재의 기본 개념을 익힌 뒤 실습 시점의 GA/preview 버전과 analyzer 지원 조건을 확인합니다.

스캔 PDF와 텍스트 PDF 분류

  • 텍스트 레이어가 있는 문서와 이미지로 된 스캔 문서는 입력 구조가 다릅니다.

    OCR은 영상에서 문자를 추정하므로 인식 오류와 표·레이아웃 손실을 검증해야 합니다.

  • 상황: 스캔 송장과 검색 가능한 계약서가 같은 파이프라인에 들어옵니다.

  • 적용: 스캔 문서는 OCR 단계가 필요할 수 있고 계약서는 기존 텍스트를 활용할 수 있습니다.

    추출 텍스트와 원문 위치·표 구조를 각각 비교해야 합니다.

OCR와 레이아웃 추출 차이

  • OCR은 글자 인식이 중심이고 레이아웃 이해는 단락·표·열·위치 관계 등을 다룹니다.

    표가 텍스트만 이어붙은 결과로 바뀌면 원래 행과 열의 관계가 사라질 수 있습니다.

  • 상황: 송장에는 세 품목의 수량과 단가가 표로 있습니다.

    추출 텍스트는 모든 수치를 한 줄로 합쳤습니다.

  • 적용: 각 품목과 수량·단가의 행 열 관계를 복원하고 원문 표와 대조해야 합니다.

Content Understanding Analyzer 설계

  • Azure Content Understanding Analyzer는 입력 유형·필드 스키마·동작 모드를 지정해 구조화된 정보를 얻습니다.

    API 2025-11-01은 GA이며 2026-06-01-preview는 신규 기능을 포함한 미리 보기 버전입니다. 설정·지원 필드·동기 호출·agentic mode 기능을 실제 사용 버전별로 구분하고, 누락된 필드를 임의로 채우지 않습니다.

  • 상황: 발주서에서 주문번호·납기·금액을 추출하고 싶습니다.

  • 적용: 발주서의 주문번호·납기·금액을 필드 스키마로 정의합니다.

    응답에 필드가 없거나 값이 없으면 앱에서 미확인 상태로 처리하고 임의 값을 채우지 않습니다. 모든 API가 동일한 null 표현을 반환한다고 가정하지 말고, 사용 버전의 응답 계약과 Analyzer 설정을 확인합니다.

  • Content Understanding 버전·수명주기 

  • Analyzer 설정 

출처 추적과 숫자 검증

  • 추출값이 맞는지 검증하려면 최종 JSON만 아니라 어디에서 어떤 문맥으로 나온 값인지 추적 가능해야 합니다.

    숫자·단위·기간은 원문과 계산 규칙을 함께 검사합니다.

  • 상황: 주문서의 세 품목은 각각 수량 2·단가 30,000원, 수량 3·단가 20,000원, 수량 1·단가 60,000원입니다.

    모델은 합계 18,000원을 출력했습니다.

  • 적용: 2×30,000 + 3×20,000 + 1×60,000 = 180,000원이므로 출력된 18,000원은 오류입니다.

    원본 페이지·품목 행·수량·단가·통화 단위를 함께 보존하고 원문 총액과 계산 결과를 대조합니다.

문서 추출을 RAG·Agent에 연결

  • 문서 분석 결과는 RAG 인덱스 또는 에이전트 도구의 입력이 될 수 있습니다.

    원문을 구조화했다고 해서 이후 질문의 권한·적용일·출처 품질을 자동 보장하지 않습니다.

  • 상황: 스캔 계약서에서 추출한 조항을 검색 인덱스로 보내 결재 에이전트가 이용합니다.

  • 적용: 문서 ID·판본·적용일·조항·페이지·접근 범위와 추출/검증 상태를 함께 전달해야 합니다.

확인 문제

공식 범위를 참고한 자체 제작 연습문제입니다. 공통 시험 유형을 연습하며 AI-103의 실제 문항 구성·난이도를 재현하지 않습니다. 공식 연습 평가 안내 (로그인 필요) · 공식 모듈 샘플 · 공식 시험 화면 체험

송장의 수량·합계 추출이 틀렸습니다. 보존할 구조와 검증은?

송장 p1:
품목 | 수량 | 단가
볼트 |  2   | 300
너트 |  3   | 100
합계 |      | 900
평탄 OCR: "볼트 너트 2 3 300 100 900"
앱 추출: 볼트 수량=3, 합계=900
  1. 합계 900이 맞으므로 품목별 수량도 통과 처리한다
  2. 표의 행·열·위치를 보존하고 품목별 계산을 대조한다
  3. OCR 문자열을 더 길게 합치고 열 이름은 제거한다
  4. 숫자를 크기순으로 정렬하고 품목 순서에 배정한다

풀이 기록 기능을 불러오는 중…

해설 보기

정답: B. 표의 행·열·위치를 보존하고 품목별 계산을 대조한다

합계가 맞아도 볼트 수량 3은 원문의 2와 다릅니다. 행·열 관계와 위치를 보존하고 품목 수량·단가 및 총합을 각각 검증해야 합니다.

문서 추출 결과를 검색 근거로 색인합니다. 제시된 두 요구를 만족하려면 보존할 정보 두 가지는?

분석 결과:
  doc_id=D9 / page=3 / field=total / value=900
  quote="합계 900" / access_group=finance
현재 색인 문서:
  {"body":"합계 900"}
요구: 재무팀만 조회, 답변에서 원문 페이지로 이동
  1. 색인 본문만 보존하고 원문 위치는 모델이 추정하도록 한다
  2. 원문 문서 ID·페이지·필드 근거를 검색 결과에 연결한다
  3. 재무팀 제한을 없애고 모든 사용자의 검색 결과를 통일한다
  4. 접근 그룹 메타데이터를 보존하고 인증 사용자에 맞게 필터링한다

풀이 기록 기능을 불러오는 중…

해설 보기

정답: B. 원문 문서 ID·페이지·필드 근거를 검색 결과에 연결한다 / D. 접근 그룹 메타데이터를 보존하고 인증 사용자에 맞게 필터링한다

원문으로 이동하려면 문서·페이지 등 출처 연결이 필요하고, 재무팀만 조회하려면 권한 메타데이터와 검색 시 접근 검사가 필요합니다. 본문 텍스트만 저장하면 두 요구를 충족할 수 없습니다.

두 소비자의 요구에 맞게 Content Understanding 결과의 전달 형식을 각각 선택하세요.

소비자 A: 송장 합계·통화의 타입과 필수 필드 검사
소비자 B: 문단·표 맥락을 검색해 답변하고 원문 인용
CU 결과: 구조화 fields + 문서 Markdown + 원문 위치
현재 변환: fields를 버리고 Markdown만 전달
A 오류: total 필드 없음 / B: 문맥 검색 가능
  1. Markdown과 출처
  2. 타입 있는 필드
  3. 필드 삭제
  4. 출처 없는 요약

풀이 기록 기능을 불러오는 중…

해설 보기

정답: 소비자 A — 합계·통화 필드의 타입 검사: 타입 있는 구조화 필드 전달 / 소비자 B — 문맥 검색과 원문 인용: 문맥을 보존한 Markdown과 원문 위치 연결

A에는 타입 검사 가능한 구조화 필드를, B에는 문단·표 문맥을 보존한 표현과 원문 위치를 전달합니다. 하나의 출력 표현이 두 소비자의 서로 다른 계약을 자동으로 충족한다고 가정하지 않습니다.

시험 범위와 실행 문서가 다를 때 학습·실습 계획은?

범위 메모: CU pro mode 항목 포함
현재 확인한 공식 문서: pro API 종료, agentic mode 이전 안내
새 실습 조건: 2026-06-01-preview / 단일 입력 파일
기존 실습: pro API로 파일 3개를 한 번에 제출
요구: 범위 용어 설명 + 현재 실행 가능한 실습
  1. 범위 메모를 기준으로 기존 pro 호출의 실행 성공을 가정한다
  2. 새 모드 이름만 바꾸고 세 파일 요청 구조를 유지한다
  3. 새 모드가 있으므로 해당 시험 범위 항목을 학습에서 삭제한다
  4. 범위 용어와 현재 지원을 구분하고 새 제약에 맞춰 검증한다

풀이 기록 기능을 불러오는 중…

해설 보기

정답: D. 범위 용어와 현재 지원을 구분하고 새 제약에 맞춰 검증한다

범위 메모를 현재 API 지원과 동일시할 수 없습니다. 용어 대응을 남기고 현재 문서의 버전·입력 제약에 맞는 실습을 따로 검증해야 합니다.

이 절 문제 모아보기

참고 자료

자료 확인: 2026-10-25 · 적용 사례 교정: 2026-10-23. 사례는 교육용이며 Azure API 호출·요금은 실행 검증하지 않았습니다.

직접 적용하기

교육용 가상 상황

가상 청구서의 소계는 10,000원, 세금은 1,000원, 인쇄된 총액은 12,000원입니다. 세 값이 모두 명확히 읽힙니다.

추출한 값을 어떻게 보존하고 어떤 검증 상태를 남길지 적으세요. 총액을 임의로 고쳐도 되는지 설명하세요.

답안 저장 기능을 불러오는 중…

검증 기준과 해설 보기
  1. 원문에서 읽힌 세 값을 그대로 보존한다.
  2. 산술상 합계 11,000원과 인쇄 총액 12,000원의 불일치를 표시한다.
  3. 원문 확인·업무 검토 대상으로 남기며 임의로 수정하지 않는다.

소계 10,000원·세금 1,000원·인쇄 총액 12,000원을 출처와 함께 보존합니다. 합계 검증은 11,000원이라 불일치 상태를 남깁니다. 실제 문서에 다른 항목이 있는지 확인하기 전 인쇄 값을 자동 보정하지 않습니다.

복습하기

  1. OCR과 필드 추출은 같은 결과인가요?
  2. 값이 읽히면 문서가 맞는 것인가요?
  3. 구조화 결과에 무엇을 남기나요?
  4. 숫자 필드 검사와 근거 문서 검색에 같은 표현만 전달해도 되나요?
답변 확인 기준
  1. OCR과 필드 추출은 같은 결과인가요?

    문자 읽기와 문서 구조·의미를 가진 필드 추출은 구분합니다.

  2. 값이 읽히면 문서가 맞는 것인가요?

    추출 정확성과 문서 내부·업무 규칙 일관성은 별도입니다.

  3. 구조화 결과에 무엇을 남기나요?

    값과 원문 위치·단위·불확실성·검증 상태를 연결합니다.

  4. 숫자 필드 검사와 근거 문서 검색에 같은 표현만 전달해도 되나요?

    타입 검사는 구조화 필드를, 문맥 검색과 인용은 문서 표현·출처·원문 위치를 필요로 합니다. 소비자별 출력 계약에 맞게 연결합니다.