MakeAI 딥러닝

PDF 표 추출 방법 4가지 — 파이썬부터 대량 문서 자동화까지

오픈소스 라이브러리부터 VLM 기반 추출까지, 방법별 장단점과 선택 기준을 비교해요. 직접 해 보실 분들을 위한 글이에요.

3분 읽기

"PDF에서 표 좀 뽑아 주세요"는 모든 데이터 팀이 한 번씩 받는 요청이에요. 방법이 여러 가지인데 각각 잘 되는 상황이 달라요. 저희가 써 본 네 가지를 비교해 볼게요. 직접 해 보실 분들을 위해 뭘 먼저 시도할지 기준도 같이요.

먼저 확인: 텍스트 레이어가 있나요?

이게 제일 중요해요. PDF를 열어서 글자가 드래그로 선택되면 텍스트 레이어가 있는 거예요. 워드·한글·엑셀에서 저장한 PDF는 있고, 스캔한 PDF는 없어요. 있으면 1·2번 방법, 없으면 3·4번이에요.

파이썬으로는 이렇게 확인해요.

import fitz  # PyMuPDF
doc = fitz.open("file.pdf")
has_text = any(page.get_text().strip() for page in doc)

방법 1. 텍스트 위치 기반 (pdfplumber, camelot 등)

텍스트 레이어의 글자 좌표와 선(ruling line)을 이용해 표를 복원해요. 선이 있는 표(격자 표)는 아주 잘 돼요. 선이 없는 표는 글자 정렬로 추정하는데 열이 밀리기 쉬워요.

  • 장점: 빠르고, 글자가 정확해요(OCR이 아니니까). 설치만 하면 바로 써요.
  • 단점: 병합 셀, 선 없는 표, 두 단 레이아웃에서 약해요. 표가 페이지를 넘어가면 끊겨요.
  • 쓸 때: 양식이 일정하고 선이 있는 표. 재무제표, 명세서.
import pdfplumber
with pdfplumber.open("file.pdf") as pdf:
    for page in pdf.pages:
        for table in page.extract_tables():
            print(table)

방법 2. 원본 형식으로 돌아가기

PDF가 HWP나 엑셀에서 나왔고 원본 파일을 구할 수 있으면, PDF를 파싱하지 말고 원본을 파싱하세요. 1월에 쓴 HWP 파서 글이 이거예요. 표 구조(병합 포함)가 정확히 나와요.

  • 장점: 정확도가 압도적이에요. 구조 손실이 없어요.
  • 단점: 원본이 있어야 해요. 형식마다 파서가 필요해요.
  • 쓸 때: 사내 문서처럼 원본 접근이 되는 경우. 공공 문서 중 HWP가 같이 배포되는 경우.

방법 3. 이미지 기반 표 구조 인식 + OCR

PDF를 이미지로 그린 뒤, 딥러닝 모델로 표 영역과 셀 구조를 찾고, 각 셀을 OCR해요. 저희 파이프라인이 이 방식이에요(2월 3일 글).

  • 장점: 스캔 문서도 돼요. 병합 셀, 선 없는 표도 모델이 학습했으면 돼요. 셀 좌표가 나와요.
  • 단점: 모델과 GPU가 필요해요. OCR 오류가 있어요. 설정이 복잡해요.
  • 쓸 때: 스캔 문서, 양식이 다양한 문서, 대량 처리.

오픈소스로 시작하신다면 표 검출·구조 인식 모델(Table Transformer 계열 등)과 OCR 엔진을 조합하시면 돼요. 다만 한국어 문서에는 추가 학습 없이는 정확도가 아쉬울 거예요.

방법 4. VLM(비전-언어 모델)에 이미지 넣기

페이지 이미지를 멀티모달 모델에 넣고 "표를 Markdown으로 뽑아 줘"라고 해요.

  • 장점: 설정이 거의 없어요. 처음 보는 레이아웃도 대충 돼요. 표 옆 설명까지 같이 이해해요.
  • 단점: 좌표가 없어요. 흐린 숫자를 지어내요. 긴 표에서 행을 빼먹어요. 비싸고, 문서가 외부로 나가요.
  • 쓸 때: 소량, 다양한 문서, 틀려도 사람이 바로 확인하는 경우. 프로토타입.

6월 9일 글에서 비교한 것처럼, 정해진 문서 종류에서는 3번이 4번보다 정확했어요. 하지만 뭐가 올지 모르는 상황에서는 4번이 편해요.

선택 기준 정리

상황 추천
원본 HWP/엑셀 구할 수 있음 2번
텍스트 레이어 있고 격자 표 1번
스캔 문서 대량 3번
소량, 다양, 빠른 시작 4번
숫자가 틀리면 안 됨 1·2·3번 (4번은 검수 필수)

대량 자동화로 갈 때

몇 장이 아니라 수만 장이면 방법 선택보다 파이프라인이 중요해져요. 3월 31일 처리량 글이 그거예요. 그리고 어떤 방법이든 결과 검증을 붙이세요. 합계 행이 세부 합과 맞는지, 열 개수가 헤더와 맞는지 같은 간단한 검사가 오류의 상당 부분을 잡아요.

다음 주는 "데이터 전처리"가 왜 AI 프로젝트의 진짜 병목인지, 조금 넓은 시각에서 써 볼게요.