"RAG 핵심 학습 (4/26) — OCR과 레이아웃 분석"

2편이 정상적인 디지털 PDF를 마크다운으로 옮겼다. 본 편은 그 밖의 모든 경우 — 스캔본·이미지 안의 텍스트·복잡 표·다단 레이아웃 — 를 다룬다.

코퍼스에는 거의 항상 비정상 PDF가 섞여 있다. 종이를 스캔한 PDF, 한국어 폰트가 깨진 PDF, 표가 시각으로만 알아볼 수 있는 PDF, 다단 보고서. 본 편은 다섯 도구 — PaddleOCR · Tesseract · AWS Textract · Azure Document Intelligence · LayoutLMv3 — 를 문자 인식 정확도 · 레이아웃 보존 · 표 추출 · 한국어 지원 · 운영 비용의 다섯 축으로 비교한다.


0. Prerequisites

  • 2편의 마크다운 변환 흐름.
  • 이미지PDF 안의 텍스트 객체가 다르다는 점.

OCR 내부 알고리즘(CTC, attention OCR)은 알 필요 없다. 본 편은 도구 선택 표에 집중한다.


1. 학습 목표

  1. OCR과 레이아웃 분석의 차이를 한 줄로 설명한다 — OCR = 글자 인식, Layout = 어디에·어떤 순서로·어떤 블록인지.
  2. 다섯 도구의 강점·약점·라이선스·비용을 표로 비교한다.
  3. 한국어가 섞인 코퍼스에서 가장 위험한 실패가 무엇인지 안다.

2. 핵심 요약

OCR은 글자를, 레이아웃 분석은 글자가 모인 블록을 인식한다. 둘은 분리된 단계이며, 좋은 RAG 전처리는 둘 다를 거친다. PaddleOCR은 오픈 / 다국어 / 무료의 균형 좋은 표준, Tesseract는 가장 오래된 오픈 OCR로 한국어가 약한 편, AWS Textract와 Azure DI는 표·폼·서명까지 인식하는 상용 API, LayoutLMv3는 레이아웃 + 텍스트의 통합 임베딩을 학습한 모델로 OCR 후처리에 결합된다. 한국어 코퍼스는 PaddleOCR을 기본으로 시작해 정확도가 모자라면 Azure DI를 섞는다.


3. 직관 — 다섯 도구가 같은 페이지에서 보는 것

스캔된 한국어 회의록 한 페이지를 가정한다. 상단 로고, 한국어 제목, 본문 두 단, 가운데 표 1개, 하단 손글씨 서명.

  • PaddleOCR: 한국어 글자 인식이 깔끔. 표는 셀 좌표로 식별하지만 마크다운 표로 자동 변환은 약함.
  • Tesseract: 한국어 모델(kor)이 있지만 손글씨·복잡 폰트 약함. 빠르고 무료.
  • AWS Textract: 표·폼 인식이 강함. 한국어 공식 지원 추가됨(2023~). 페이지당 비용.
  • Azure Document Intelligence: 표·서명·체크박스 인식 최상급. 한국어 지원 우수. 페이지당 비용.
  • LayoutLMv3: OCR이 아니다. OCR이 만든 (텍스트 + bbox) 입력을 받아 문서 이해(분류·QA·entity 추출)를 한다. 후처리 단계.
diagram-1

4. 정의 — 두 개의 별개 단계

단계 출력 대표 도구
OCR (Optical Character Recognition) 픽셀 → 유니코드 문자. 각 글자에 bounding box. Tesseract, PaddleOCR
Layout Analysis bbox 모음 → 블록 분류(Title / Paragraph / Table / Image)와 읽기 순서 LayoutLMv3, DocTR, Donut
End-to-end Document AI 픽셀 → (텍스트 + 구조 + 추출 필드)를 한 번에 AWS Textract, Azure DI

다섯 도구의 위치를 한 표로:

도구 OCR Layout Table Form/Sign 라이선스 한국어
Tesseract 3 1 1 Apache 2.0 2
PaddleOCR 4 2 2 Apache 2.0 4
AWS Textract 4 3 4 3 상용 API 3
Azure DI 4 4 4 4 상용 API 4
LayoutLMv3 4 2 2 MIT OCR에 의존

LayoutLMv3는 OCR이 아니라 레이아웃 + 언어의 통합 임베딩을 학습한 모델이다. 한국어 성능은 OCR 단계에 의존한다.


5. 표준 호출

from paddleocr import PaddleOCR
ocr = PaddleOCR(lang="korean")
result = ocr.ocr("page.png")  # [[bbox, (text, score)], ...]

import pytesseract
text = pytesseract.image_to_string("page.png", lang="kor")

import boto3
client = boto3.client("textract")
resp = client.detect_document_text(Document={"Bytes": open("page.png","rb").read()})

from azure.ai.documentintelligence import DocumentIntelligenceClient
client = DocumentIntelligenceClient(endpoint, key)
poller = client.begin_analyze_document("prebuilt-layout", body=open("page.pdf","rb"))
result = poller.result()

LayoutLMv3는 Hugging Face Transformers로 로드해 분류/QA/추출에 사용. OCR과는 입력 형식이 다르므로 본 편에서는 호출만 언급한다.


6. 원리 워크스루 — 픽셀이 마크다운이 되기까지

  1. 이미지 정규화: 회전, 기울임, 노이즈 제거.
  2. 텍스트 검출(Text Detection): 글자가 어디에 있는지 bbox 식별. PaddleOCR의 DB(detection branch).
  3. 텍스트 인식(Text Recognition): 각 bbox 안의 문자열 추출. CRNN, attention OCR 등.
  4. 레이아웃 분류: bbox들을 블록 단위(제목·본문·표·이미지)로 묶음. LayoutLMv3가 여기서 강함.
  5. 표 인식: 표 영역을 행·열 셀로 분해. AWS Textract Table, Azure DI Table.
  6. 읽기 순서 정렬: bbox 좌표를 사람이 읽는 순서로 정렬.
  7. 마크다운 직렬화: 위 출력을 마크다운 헤더·문단·표·이미지 링크로.

도구별로 어디까지 해 주는지가 본 편의 비교 기준.


7. 변형과 사례

7.1 PaddleOCR

  • 무엇이 바뀌나: Apache 2.0 오픈 OCR로 80+ 언어. 한국어 모델 v4가 표준 정확도.
  • 왜 등장했나: Baidu의 내부 OCR을 오픈 공개. 상용 API 비용 없이 다국어를 다루고자 하는 팀이 많았다.
  • 무엇이 가능해졌나: 한국어 코퍼스를 로컬에서 무료로 OCR. GPU 가속 가능.
  • 어디에 적합한가: 한국어가 주력인 코퍼스. 비용을 줄여야 하는 코퍼스.
  • 한계와 다음 단계: 표·서명·체크박스 전용 인식이 약하다. 표는 별도 도구. → Azure DI 또는 LayoutLMv3.

7.2 Tesseract

  • 무엇이 바뀌나: 가장 오래된 오픈 OCR. 30년 + 역사. kor 언어팩.
  • 왜 등장했나: HP/Google이 공공 자산으로 공개. 호환 가능한 어디에든 깐다는 장점.
  • 무엇이 가능해졌나: 어떤 OS에서도 한 줄 설치. 무료.
  • 어디에 적합한가: 단순 영어 텍스트. 라틴 알파벳 중심.
  • 한계와 다음 단계: 한국어·일본어·중국어 정확도가 PaddleOCR보다 낮다. 복잡 폰트·손글씨 약함. → PaddleOCR 또는 Azure DI.

7.3 AWS Textract

  • 무엇이 바뀌나: AWS의 Document AI API. 텍스트 + 표 + 폼 + 손글씨 + 쿼리(자연어 질의로 필드 추출).
  • 왜 등장했나: 엔터프라이즈 문서(영수증·계약서·서식)의 추출 자동화. 한국어는 2023년부터 공식.
  • 무엇이 가능해졌나: 비즈니스 폼·계약서를 셀 단위로 마크다운화. SLA·HIPAA 옵션.
  • 어디에 적합한가: AWS 환경의 기업 문서 처리. 폼·표가 핵심.
  • 한계와 다음 단계: 페이지당 비용($1.50/1000 페이지 ~ Document AI 가격에 따라 다름). 데이터가 AWS로 이동. → 보안 요건이 매우 강하면 로컬 PaddleOCR + Docling.

7.4 Azure Document Intelligence (구 Form Recognizer)

  • 무엇이 바뀌나: Microsoft의 문서 AI. prebuilt 모델(레이아웃 / 영수증 / 신분증 / 명함)과 custom 모델(자체 데이터로 fine-tune).
  • 왜 등장했나: Azure의 OCR 강화. 한국어 최상급.
  • 무엇이 가능해졌나: 표·서명·체크박스·키-값 쌍을 한 번에 추출. prebuilt-layout 모델이 RAG 전처리의 표준 후보 중 하나.
  • 어디에 적합한가: 한국어 + 표가 동시에 중요한 코퍼스. Azure 환경.
  • 한계와 다음 단계: 페이지당 비용($1.50~$50 per 1000 페이지, 모델별). 데이터 이동.

7.5 LayoutLMv3 — OCR 후처리 모델

  • 무엇이 바뀌나: OCR 결과를 (텍스트 + bbox + 이미지 패치) 세 modality로 받아 문서 이해를 학습. 분류·QA·entity 추출.
  • 왜 등장했나: 텍스트만으로는 읽기 순서블록 의미가 잡히지 않음. Microsoft Research(2022).
  • 무엇이 가능해졌나: 영수증의 총액 필드, 계약서의 서명란, 보고서의 제목 vs 본문 같은 구조적 이해.
  • 어디에 적합한가: OCR 결과를 분류/추출해야 하는 후처리 단계. RAG의 Knowledge Base 풍부화 단계.
  • 한계와 다음 단계: OCR 자체는 수행하지 않는다. 한국어 LayoutLMv3는 제한적. → OCR은 PaddleOCR/Azure DI로 분리.

8. 한계와 실패 양상

8.1 한국어 물음표 모양 출력

  • 왜 본질적인가: PDF의 폰트 매핑 오류 + OCR 미적용. 디지털 PDF인데 폰트 임베드가 없으면 텍스트 추출이 깨진다.
  • 진단: 변환 출력에 ? 또는 가 다수.
  • 완화: 해당 PDF를 이미지로 렌더링한 뒤 OCR(PaddleOCR kor).
  • 다음 편으로 연결: 2편 8.4절 + 본 편 7.1절.

8.2 표가 행 단위 한 줄로 무너짐

  • 왜 본질적인가: OCR이 글자만 보고 셀 경계를 모르면, 행 안의 셀들이 공백 한 줄로 합쳐진다.
  • 진단: 마크다운 출력에 |가 적고 셀 값들이 공백으로 늘어선 형태.
  • 완화: Textract/Azure DI의 Table 기능, 또는 OCR 결과를 bbox 좌표로 다시 셀화하는 후처리.
  • 다음 편으로 연결: 본 편 7.3절·7.4.

8.3 다단 레이아웃의 읽기 순서 꼬임

  • 왜 본질적인가: OCR은 글자를 인식하지 읽기 순서를 결정하지 않는다. 단순히 위→아래, 좌→우로 정렬하면 두 단 사이를 왔다 갔다.
  • 진단: 같은 문장이 두 단을 교차하며 출력됨.
  • 완화: LayoutLMv3 또는 읽기 순서 알고리즘(Textract / Azure DI는 내부에서 처리).
  • 다음 편으로 연결: 본 편 7.4절·7.5.

8.4 손글씨·서명 무시

  • 왜 본질적인가: 일반 OCR은 인쇄 글자에 최적화. 손글씨는 정확도가 50% 이하까지 떨어질 수 있다.
  • 진단: 손글씨 영역이 빈 줄이 되거나 임의 문자열로 채워짐.
  • 완화: AWS Textract FORMS 모드 또는 Azure DI prebuilt-handwritten 모델.
  • 다음 편으로 연결: 본 편 7.3절·7.4.

8.5 비용·지연 누적

  • 왜 본질적인가: 1만 페이지 OCR은 PaddleOCR 로컬이면 수십 시간 (페이지당 2~5초). Textract / Azure DI는 비용 수십~수백 달러. LayoutLMv3 후처리까지 가면 다시 GPU 시간.
  • 진단: 1회 KB 빌드의 시간·비용을 추정.
  • 완화: 문서 등급화 — 핵심은 Azure DI, 보조는 PaddleOCR. 증분 OCR.
  • 다음 편으로 연결: 25편 운영.

8.5 Common Pitfalls

  • "디지털 PDF는 OCR 불필요" — 한국어는 폰트 매핑 깨짐이 잦다. 8.1절.
  • "표는 자동으로 잡힌다" — OCR만으로는 표를 못 잡는 경우가 많음. 8.2절.
  • "한 도구로 모든 문서" — 비용·정확도 모두 손해. 코퍼스 등급화 필수.
  • "OCR 한 번 통과하면 끝" — 표·손글씨·다단은 별도 모델이 필요할 수 있다.
  • "LayoutLMv3가 OCR이다" — 아니다. OCR 결과를 받는 후처리 모델.

9. 정리된 결론

Q1. OCR과 Layout Analysis는 어떻게 다른가?

OCR은 글자 인식. Layout은 글자가 모인 블록의 분류·읽기 순서. 둘은 분리된 단계. Chapter: §4.

Q2. 한국어 코퍼스의 기본 OCR 선택은?

PaddleOCR(kor). 정확도가 모자라거나 표·서명이 중요하면 Azure DI를 섞는다. Chapter: 7.1절·7.4.

Q3. 표 추출 정확도가 가장 높은 두 도구는?

AWS Textract, Azure DI. 둘 다 셀 단위 재구성키-값 쌍 추출 지원. Chapter: 7.3절·7.4.

Q4. LayoutLMv3를 언제 쓰는 것이 옳은가?

OCR로 텍스트와 bbox를 확보한 , 문서를 분류·추출해야 할 때. RAG의 KB 풍부화 단계. Chapter: 7.5절.

Q5. 한국어 PDF에서 물음표 모양이 나올 때 OCR을 거치면 해결되는가?

OCR은 이미지 픽셀로부터 글자를 재인식한다. PDF 내부의 깨진 폰트 매핑을 우회한다. Chapter: 8.1절.


10. 추가 학습

1차 자료

  • Du, Y. et al. PP-OCRv4. arXiv:2304.10833 (PaddleOCR v4 기술 보고).
  • Smith, R. An Overview of the Tesseract OCR Engine. ICDAR 2007.
  • Huang, Y. et al. LayoutLMv3: Pre-training for Document AI with Unified Text and Image Masking. ACM MM 2022. arXiv:2204.08387
  • AWS Textract / Azure Document Intelligence 공식 모델 카드 (2024 업데이트).

공식 docs

  • PaddleOCR: https://github.com/PaddlePaddle/PaddleOCR
  • Tesseract: https://tesseract-ocr.github.io/
  • AWS Textract: https://docs.aws.amazon.com/textract/
  • Azure Document Intelligence: https://learn.microsoft.com/azure/ai-services/document-intelligence/
  • Hugging Face LayoutLMv3: https://huggingface.co/microsoft/layoutlmv3-base

보조 자료

  • 사용자 노트 3장 — OCR / Layout 우선순위.
  • 사용자 노트 §35-6 — Filter-first의 전처리 가치.

Cheat Sheet

도구 한국어 라이선스 비용 적합
Tesseract 2 1 Apache 무료 단순 영어
PaddleOCR 4 2 Apache 무료 한국어 기본
AWS Textract 3 4 상용 페이지 비용 폼·표 중심
Azure DI 4 4 상용 페이지 비용 한국어 + 표
LayoutLMv3 OCR 의존 2 MIT GPU 시간 OCR 후처리

Bridge — 다음 편

다음 — RAG 핵심 학습 (5/26) 청킹 전략의 5가지 길.

문서가 마크다운으로 들어오고, 어디서 찾을 것인가도 정해졌다. 이제 어떤 단위로 자를 것인가. Fixed / Paragraph / Heading / Semantic / Sliding Window 다섯 전략과, 3편이 남긴 Whole-document vs Chunk-level 결정 표를 한 자리에서 푼다.

시리즈 전체 안내: 시리즈 목차

댓글

이 블로그의 인기 게시물

"LLM 핵심 학습 (1/6) — 기본: 토큰화·임베딩·어텐션·위치 인코딩"

"LLM 핵심 학습 (2/6) — 파인튜닝: LoRA·QLoRA·증류·Adapter"

"ML 기초 학습 (1/9) — 머신러닝과 sklearn: 학습의 좌표계"