Skip to main content

PDF 전처리 통합 도구 — 메타데이터, 텍스트 파싱, OCR, 표 추출

Project description

PDF 메타데이터 / 파싱 / OCR / 표 추출 도구

PDF 파일의 메타데이터를 확인하고, 3가지 라이브러리(pypdf / pdfplumber / pymupdf)로 텍스트를 파싱하며, 2가지 OCR 엔진(tesseract / paddleocr)으로 이미지 기반 텍스트를 추출하고, 3가지 표 추출 라이브러리(camelot / tabula / layoutparser)로 표를 검출·추출하는 Python 스크립트 모음입니다.

구성

파일 설명
pdf_metadata.py PDF 메타데이터 추출/출력 모듈. CLI로 직접 실행 가능
test_pdf_metadata.py pdf_metadata를 불러와 동작을 검증하는 테스트 스크립트
parsing_pdf.py 3종 라이브러리로 PDF 텍스트를 파싱하는 통합 모듈
test_parsing_pdf.py 각 파싱 엔진별 결과를 비교·검증하는 테스트 스크립트
ocr_pdf.py 2종 OCR 엔진(tesseract / paddleocr)으로 PDF를 OCR하는 통합 모듈
test_ocr_pdf.py OCR 엔진별 결과(텍스트, 신뢰도, 박스 수 등)를 비교 검증
table_pdf.py 3종 라이브러리(camelot / tabula / layoutparser)로 표 추출하는 통합 모듈
test_table_pdf.py 표 추출 엔진별 결과(표 개수, 행/열, 정확도 등)를 비교 검증
requirements.txt 의존성 목록
data/ 테스트용 PDF 파일을 두는 폴더

설치

pip install -r requirements.txt

PEP 668 환경(Ubuntu 등 시스템 Python)에서는 가상환경 사용을 권장합니다.

python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

Tesseract 시스템 패키지

pytesseract는 시스템에 설치된 tesseract 바이너리를 호출하므로 별도 설치가 필요합니다.

# Ubuntu/Debian — 한국어 + 영어 traineddata 포함
sudo apt install tesseract-ocr tesseract-ocr-kor tesseract-ocr-eng

# 설치 확인
tesseract --version
tesseract --list-langs   # kor, eng 출력되어야 함

PaddleOCR 버전 주의

paddleocr 2.7.3 + paddlepaddle 2.6.2 + numpy<2 조합으로 고정되어 있습니다. PaddleOCR 3.x / paddlepaddle 3.x 조합에서는 CPU 환경에서 PIR + oneDNN 호환 문제가 발생할 수 있어 LTS 조합을 사용합니다. 최초 실행 시 모델 파일이 자동으로 다운로드됩니다(~수십 MB).

Python 3.12+ 사용자: paddlepaddle 2.6.2는 표준 라이브러리에서 제거된 distutils를 호출하므로 setuptools가 반드시 설치돼 있어야 합니다(requirements.txt에 포함). 누락 시 No module named 'setuptools'가 발생하면 pip install setuptools로 해결하세요.

표 추출 시스템 패키지

  • camelotghostscript 필요 (sudo apt install ghostscript)
  • tabula → JRE 필요 (sudo apt install default-jre)
  • layoutparser → PaddleDetection 백엔드 + TableBank 모델 사용 (표 전용 학습)
    • OCR 섹션에서 설치한 paddlepaddle 만으로 동작
    • 최초 실행 시 모델(약 221MB) 자동 다운로드 (Baidu CDN)
    • 별도 paddledet 또는 detectron2 설치 불필요

사용법

1. PDF 메타데이터 출력 (pdf_metadata.py)

python3 pdf_metadata.py data/pdf_sample.pdf
python3 pdf_metadata.py a.pdf b.pdf c.pdf

출력 항목

  • 파일 크기, 페이지 수, PDF 버전, 암호화 여부
  • Document Info: Title, Author, Subject, Keywords, Creator, Producer
  • 생성일/수정일 (D:YYYYMMDDHHMMSSYYYY-MM-DD HH:MM:SS 변환)
  • 기타 메타데이터 키(/Trapped 등)

2. 메타데이터 테스트 (test_pdf_metadata.py)

python3 test_pdf_metadata.py                     # 기본 data/ 폴더
python3 test_pdf_metadata.py data/pdf_sample.pdf # 단일 파일
python3 test_pdf_metadata.py a.pdf b.pdf data/   # 혼합 지정

3. PDF 텍스트 파싱 (parsing_pdf.py)

# 전체 엔진으로 한 번에 비교
python3 parsing_pdf.py data/parsing_sample.pdf

# 특정 엔진만 사용
python3 parsing_pdf.py data/parsing_sample.pdf pypdf
python3 parsing_pdf.py data/parsing_sample.pdf pdfplumber
python3 parsing_pdf.py data/parsing_sample.pdf pymupdf

엔진별 특징

  • pypdf — 가벼움. 목차/폼/주석 등 문서 구조 메타에 강점
  • pdfplumber — 표(테이블) 추출, 단어/문자 단위 bbox에 강점
  • pymupdf (fitz) — 빠르고 강력. 블록·이미지·폰트·색상 등 풍부한 메타

4. 파싱 테스트 (test_parsing_pdf.py)

python3 test_parsing_pdf.py                       # 기본 data/ 폴더
python3 test_parsing_pdf.py data/pdf_sample.pdf   # 단일 파일
python3 test_parsing_pdf.py /다른/경로/             # 다른 폴더

출력

  • 엔진 × 파일 시간/페이지/텍스트길이 매트릭스
  • 엔진별 특화 지표 (예: pdfplumber → 표 개수, pymupdf → 블록·이미지·폰트 수)

5. OCR 실행 (ocr_pdf.py)

# 전체 엔진으로 비교 (tesseract → paddleocr 순)
python3 ocr_pdf.py data/pdf_sample.pdf

# 특정 엔진만 사용
python3 ocr_pdf.py data/pdf_sample.pdf tesseract
python3 ocr_pdf.py data/pdf_sample.pdf paddleocr

처리 흐름

  1. pymupdf로 PDF 각 페이지를 PNG로 렌더링(기본 200 DPI)
  2. 이미지를 OCR 엔진에 전달
  3. 텍스트 + 신뢰도 + 박스/단어 통계 반환

엔진별 특징

  • tesseract — 가벼움/빠름. kor+eng 등 다국어 동시 인식. 단어 단위 신뢰도 제공
  • paddleocr — 딥러닝 기반. 검출(detection) + 인식(recognition) 2단계로 라인별 박스 + 신뢰도 반환

6. OCR 테스트 (test_ocr_pdf.py)

python3 test_ocr_pdf.py                              # 기본 파일 + 전체 엔진
python3 test_ocr_pdf.py data/pdf_sample.pdf          # 지정 파일 + 전체 엔진
python3 test_ocr_pdf.py /다른/경로/                    # 지정 폴더 + 전체 엔진

# 엔진 단독 실행 (마지막 인자가 엔진 이름이면 그것만 실행)
python3 test_ocr_pdf.py data/pdf_sample.pdf tesseract
python3 test_ocr_pdf.py data/pdf_sample.pdf paddleocr
python3 test_ocr_pdf.py paddleocr                    # 엔진만 지정 → 기본 파일 사용

출력

  • 엔진 × 파일 시간/페이지/텍스트길이 매트릭스
  • 엔진별 특화 지표
    • tesseract: 인식 단어 수, 평균 신뢰도(%), 사용 언어
    • paddleocr: 검출 텍스트 박스 수, 평균 신뢰도, 사용 언어

라이브러리 미설치 시 해당 엔진은 자동으로 SKIP 처리됩니다.

7. 표 추출 (table_pdf.py)

# 전체 엔진으로 비교
python3 table_pdf.py data/table_sample.pdf

# 특정 엔진만 사용
python3 table_pdf.py data/table_sample.pdf camelot
python3 table_pdf.py data/table_sample.pdf tabula
python3 table_pdf.py data/table_sample.pdf layoutparser

엔진별 특징

  • camelot — PDF 표 추출 전용. lattice(선 기반) / stream(좌표 기반) 두 모드. 정확도(accuracy)·여백률(whitespace) 등 품질 지표 제공. Ghostscript 필요
  • tabulatabula-java 래퍼. pandas DataFrame 리스트 반환. JRE 필요
  • layoutparser — 페이지를 이미지로 렌더링 후 'Table' 영역의 bbox를 탐지하는 레이아웃 검출기. 셀 내용 추출이 아닌 '표 위치' 검출용. PaddleDetection 백엔드 + TableBank 모델 (영문 PubLayNet 대신 표 전용 학습)

8. 표 추출 테스트 (test_table_pdf.py)

python3 test_table_pdf.py                            # 기본 파일 + 전체 엔진
python3 test_table_pdf.py data/table_sample.pdf      # 지정 파일 + 전체 엔진
python3 test_table_pdf.py /다른/경로/                   # 지정 폴더 + 전체 엔진

# 엔진 단독 실행
python3 test_table_pdf.py data/table_sample.pdf camelot
python3 test_table_pdf.py data/table_sample.pdf tabula
python3 test_table_pdf.py data/table_sample.pdf layoutparser
python3 test_table_pdf.py camelot                    # 엔진만 지정 → 기본 파일 사용

기본 파일은 data/table_sample.pdf입니다. 출력에는 표 개수, 각 표의 행/열 크기, 첫 표 미리보기, 엔진별 특화 지표(camelot 정확도, tabula 헤더, layoutparser bbox)가 포함됩니다.

폴더 구조

code/
├── README.md
├── requirements.txt
├── pdf_metadata.py
├── test_pdf_metadata.py
├── parsing_pdf.py
├── test_parsing_pdf.py
├── ocr_pdf.py
├── test_ocr_pdf.py
├── table_pdf.py
├── test_table_pdf.py
└── data/
    ├── pdf_sample.pdf
    ├── parsing_sample.pdf
    └── table_sample.pdf

data/에 PDF를 추가하면 인자 없이 테스트를 실행해도 자동으로 같이 검증됩니다.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pdfprep-0.1.0.tar.gz (15.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pdfprep-0.1.0-py3-none-any.whl (15.2 kB view details)

Uploaded Python 3

File details

Details for the file pdfprep-0.1.0.tar.gz.

File metadata

  • Download URL: pdfprep-0.1.0.tar.gz
  • Upload date:
  • Size: 15.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for pdfprep-0.1.0.tar.gz
Algorithm Hash digest
SHA256 3db1b991ae0c3fcfabce676f3e534ce51eea7560d269628c64c186dfa753190f
MD5 34cffe81947e43521653b9fba6136090
BLAKE2b-256 d115a023878e9fe7e12738f4ccd9ab7ce745421899b0e37a127463e72a9e9587

See more details on using hashes here.

File details

Details for the file pdfprep-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: pdfprep-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 15.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for pdfprep-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d0579a660bd8ee878fd11d8993a98847e5740eb174de8cbfc9026b9f2ccd8fda
MD5 392df50a06476dd91ddf03bd52ec4082
BLAKE2b-256 932e42a0557ff996a4aa8426c977d9501d27cb82a5150875c943394e62766873

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page