"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. 학습 목표
- OCR과 레이아웃 분석의 차이를 한 줄로 설명한다 — OCR = 글자 인식, Layout = 어디에·어떤 순서로·어떤 블록인지.
- 다섯 도구의 강점·약점·라이선스·비용을 표로 비교한다.
- 한국어가 섞인 코퍼스에서 가장 위험한 실패가 무엇인지 안다.
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 추출)를 한다. 후처리 단계.
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. 원리 워크스루 — 픽셀이 마크다운이 되기까지
- 이미지 정규화: 회전, 기울임, 노이즈 제거.
- 텍스트 검출(Text Detection): 글자가 어디에 있는지 bbox 식별. PaddleOCR의 DB(detection branch).
- 텍스트 인식(Text Recognition): 각 bbox 안의 문자열 추출. CRNN, attention OCR 등.
- 레이아웃 분류: bbox들을 블록 단위(제목·본문·표·이미지)로 묶음. LayoutLMv3가 여기서 강함.
- 표 인식: 표 영역을 행·열 셀로 분해. AWS Textract Table, Azure DI Table.
- 읽기 순서 정렬: bbox 좌표를 사람이 읽는 순서로 정렬.
- 마크다운 직렬화: 위 출력을 마크다운 헤더·문단·표·이미지 링크로.
도구별로 어디까지 해 주는지가 본 편의 비교 기준.
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 DIprebuilt-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 결정 표를 한 자리에서 푼다.
시리즈 전체 안내: 시리즈 목차
댓글
댓글 쓰기