PDF, 워드, 스캔 이미지 같은 문서에서 텍스트와 표·제목 같은 구조를 뽑아 LLM이 읽을 수 있게 바꾸는 작업으로, RAG를 만들 때 가장 먼저 거치는 단계다. 여기서 표가 깨지거나 문장 순서가 뒤섞이면 뒤에서 아무리 좋은 모델을 써도 답이 틀리므로, 파싱 품질이 검색 정확도를 좌우한다.
| 방식 | 잘 맞는 문서 | 특징 |
|---|---|---|
| 텍스트 추출 라이브러리 (PyMuPDF, pdfplumber) | 글 위주의 디지털 PDF | 빠르고 무료, 복잡한 표에 약함 |
| OCR | 스캔본, 사진 | 이미지 속 글자를 읽음, 잘못 읽을 수 있음 |
| 전문 파싱 서비스 (LlamaParse, Unstructured) | 표·이미지가 많은 문서 | 레이아웃 분석, 비용 발생 |
| 멀티모달 LLM에 페이지 이미지 전달 | 구조가 중요한 소량 문서 | 구조를 잘 읽지만 느리고 비쌈 |
글자만 뽑으면 표의 행과 열이 한 줄로 이어지고, 두 단으로 편집된 문서는 왼쪽과 오른쪽 문장이 섞인다. 제목 계층, 페이지 번호, 각주도 함께 남겨야 검색이 정확해지고 "몇 쪽에 나온다"는 출처 표시도 할 수 있다.
그래서 많은 도구가 결과를 마크다운처럼 제목과 표가 드러나는 형식으로 내보낸다. 이렇게 해 두면 나중에 청크로 나눌 때 제목 단위로 자르기 쉽다.
먼저 디지털 PDF인지 스캔본인지 확인한다. PDF에서 글자를 드래그해 선택할 수 있으면 텍스트가 들어 있는 파일이라 PyMuPDF나 pdfplumber로 충분할 때가 많다. 선택이 안 되면 이미지로만 된 파일이므로 OCR이 필요하다.
표와 그림이 많은 보고서, 재무제표, 논문에는 LlamaParse나 Unstructured 같은 레이아웃 분석 도구가 낫다. 몇 장 안 되는데 구조가 특히 복잡하면 페이지를 이미지로 바꿔 Claude나 GPT 같은 멀티모달 모델에 바로 넘기는 방법도 쓴다.
| 단계 | 할 일 |
|---|---|
| 1. 샘플 파싱 | 대표 문서 몇 개를 여러 도구로 돌려 본다 |
| 2. 원본과 대조 | 표, 다단, 각주가 제대로 나왔는지 눈으로 확인 |
| 3. 정리 | 반복되는 머리글·바닥글과 쪽번호를 지운다 |
| 4. 청크·메타데이터 | 제목 단위로 나누고 파일명·페이지를 붙인다 |
전체 문서를 돌리기 전에 샘플부터 검증해야 한다. 그래야 나중에 검색 품질이 떨어졌을 때 원인을 거꾸로 찾아가는 수고를 덜 수 있다.
외부 파싱 서비스는 문서를 그 서비스의 서버로 보내므로, 사내 기밀 문서라면 보안 정책부터 확인한다. 페이지 수가 늘수록 비용과 시간도 늘어난다. 쉬운 문서는 무료 라이브러리로, 어려운 문서만 유료 도구로 나눠 보내면 효율적이다.
OCR이나 LLM 기반 파싱은 숫자나 고유명사를 잘못 읽을 수 있다. 금액이나 수치가 중요한 문서라면 원본과 대조하는 단계를 꼭 거친다.
가장 흔한 건 RAG의 첫 단계로 쌓여 있는 문서를 마크다운으로 바꿔 두는 방식이다. 검색 시스템이 아니어도 긴 문서를 LLM에 넣어 요약하거나 필요한 항목만 뽑을 때 먼저 파싱부터 거친다.
| 어디서 | 어떻게 쓰나 |
|---|---|
| 사내 문서 검색 | 규정·매뉴얼 PDF를 마크다운으로 바꾸고 제목 단위로 나눠 페이지 번호와 함께 저장 |
| 보고서·논문 읽기 | 표를 살려 파싱한 뒤 LLM에 넣어 요약하거나 수치를 비교 |
| 스캔 서류 정리 | 영수증·신청서를 OCR로 읽어 날짜·금액 같은 항목을 뽑고 원본과 대조 |