*Marker를 사용하여 텍스트를 추출하고, 향상된 정확도와 성능으로 구조화된 텍스트 블록을 제공하는 최신 PDF 분석 시스템입니다.
- 모듈화된 프로젝트 구조 (서비스별 분리)
config.yaml을 통한 설정 관리- GPU 메모리 관리 유틸리티
- 최신 의존성을 사용한 요구사항 관리
- 대용량 문서를 위한 메모리 효율적인 배치 처리
- 페이지 메타데이터 추출
- Marker PDF-to-Markdown 변환
- 향상된 레이아웃 이해 및 텍스트 구조 보존
- ollama를 이용한 OCR 보완 (
config.yaml에서 llm_services 확인) - 약 5GB VRAM을 사용하는 GPU 가속
- 의존성 충돌 없음 - 최신이며 잘 관리되는 라이브러리
- 정규표현을 이용한 Figure매칭
- llm을 이용하여 Figure 추출 (다양한 참조 텍스트 유형 지원,
config.yaml의 reference_mapper 확인)
app/
├── config/ # 설정 관리
├── services/ # 핵심 비즈니스 로직
├── utils/ # 유틸리티 함수
├── api/
│ └── routes/
│ ├── analyze.py # /analyze 라우트
│ ├── health.py # /health 라우트
│ └── __init__.py # 블루프린트 통합
└── main.py # Flask API 서버
- Python 3.10 이상
- CUDA 12.8 이상 (GPU 가속용)
- 16GB 이상 시스템 RAM (24GB 이상 권장)
- 8GB 이상 VRAM을 갖춘 NVIDIA GPU (RTX 3090 권장, CPU 폴백 가능)
빠른 설치 (Windows)
# 1. 환경 생성
conda create -n pdf-mapper python=3.10
conda activate pdf-mapper
# 2. 자동 설치 스크립트 실행
install_marker_gpu.bat # GPU 사용자를 위한 스크립트수동 설치
# 1. 가상 환경 생성
conda create -n pdf-mapper python=3.10
conda activate pdf-mapper
# 2. CUDA 12.8 버전의 PyTorch 설치
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128
# 3. Marker 및 의존성 설치
pip install marker-pdf[full]
pip install -r requirements.txt
# 4. spaCy 모델 다운로드
python -m spacy download en_core_web_sm종합 테스트 스위트를 실행하여 설정을 확인하세요:
python test_marker_setup.py이 테스트는 다음을 확인합니다:
- 설정 로딩
- Marker 라이브러리 사용 가능 여부
- GPU 사용 가능 여부 및 메모리 관리
- Marker 모델 로딩 및 처리
- PDF 처리 기능
- 텍스트 블록 추출 파이프라인
python -m app.mainAPI 서버는 http://localhost:12321에서 시작됩니다.
POST `/analyze` (SSE 전용)
PDF 파일을 업로드하고 **서버-전송 이벤트(SSE)**를 통해 실시간 진행 상황과 결과를 받습니다.
요청:
- Content-Type:
multipart/form-data - 파라미터:
file(PDF 파일, 최대 50MB)
응답:
text/event-stream(SSE)- 각 이벤트는 다음과 같은 JSON 객체입니다:
{ "status": "progress|completed|error|started|warning", "message": "...", "data": { ... }, // 'completed' 상태일 때 전체 결과 "progress": 0~100 // 진행률 (퍼센트) } - 마지막 이벤트(
status: completed)에 전체 분석 결과가 포함됩니다.
GET `/health`
시스템 상태를 JSON 형식으로 반환합니다.
# SSE로 분석 진행 상황 및 결과 수신
curl -N -X POST -F "file=@sample.pdf" http://localhost:5000/analyze
# 시스템 상태 확인
curl http://localhost:5000/healthconfig.yaml 파일을 수정하여 다음을 커스터마이징하세요:
models:
marker: # 모델 이름은 nougat 대신 marker 또는 프로젝트에 맞게 변경하는 것이 좋습니다.
model_name: "naver-clova-ix/donut-base-finetuned-docvqa" # 예시, 실제 사용하는 Marker 모델로 변경
batch_size: 4 # GPU 메모리 문제 시 줄이세요
# gpu_memory: 10 # Marker는 자동 메모리 관리가 더 효율적일 수 있습니다.
precision: "fp16" # 메모리 효율성을 위해 FP16 사용
hardware:
gpu_device: 0
# total_gpu_memory: 24 # 필요 시 설정
cpu_cores: 8
api:
host: "0.0.0.0"
port: 5000
max_file_size: 52428800 # 50MBGPU 메모리 문제
config.yaml에서batch_size를 줄입니다.precision: "fp16"을 활성화합니다.- 더 작은 문서나 페이지 범위를 처리합니다.
모델 로딩 실패
- 인터넷 연결을 확인하세요 (모델은 첫 사용 시 다운로드됩니다).
- CUDA 설치를 확인하세요:
nvidia-smi CUDA_VISIBLE_DEVICES=""로 설정하여 CPU 전용 모드를 시도해보세요.
처리 시간 초과
- 대용량 문서는 배치 처리를 사용하세요.
nvidia-smi로 GPU 사용량을 모니터링하세요.
- 작은 PDF (20 페이지): 2분
- 큰 PDF (1000+ 페이지): 5-10분
이 시스템은 확장이 용이하도록 설계되었습니다. 향후 다음 기능들이 추가될 예정입니다:
- BERT 참조 추출
- 시맨틱 매칭
- 완전한 Flask API (인증토큰 도입)
services/: 독립적인 서비스 모듈utils/: 공유 유틸리티 함수config/: 설정 관리- API 라우트는
app/api/routes/내에서 기능별로 분리됩니다. - 테스트는
app/tests/에 추가해야 합니다.
- ✅ Marker를 사용한 최신 PDF-to-text 추출
- ✅ 처리 속도 및 정확도 향상
- ✅ 깨끗한 의존성 관리 (충돌 없음)
- ✅ 향상된 텍스트 블록 분류
- ✅ 향상된 레이아웃 이해
- BERT 참조 추출
- 시맨틱 매칭
- API 기능 완성
- API 문서: 이 README 참조
- 설정 참조:
config.yaml
이 프로젝트에 기여하고 싶으신가요? 언제나 환영합니다!
자세한 내용은 아래의 가이드를 참고해주세요:
- 기여 가이드라인: 코드 스타일, 커밋 메시지 규칙, PR 절차 등 기여에 필요한 모든 정보를 담고 있습니다.
- 브랜치 전략: 프로젝트에서 사용하는 Git 브랜치 전략에 대해 설명합니다.
- jaeho0718 (이재호)
- 이슈 리포트: GitHub Issues
- 기능 제안: GitHub Discussions
- 문서: docs/ 폴더 참조
이 프로젝트는 GNU General Public License v3.0 (GPL-3.0) 하에 배포됩니다. Copyright © 2025 commit bang. All rights reserved.
이 프로젝트는 marker-pdf 라이브러리(GPL-3.0-or-later)를 사용하므로, GPLv3 라이선스 요구사항을 따릅니다.
marker-pdf의 모델 가중치는 CC BY-NC-SA 4.0 라이선스가 적용되며, 상업적 사용에 대한 자세한 내용은 Marker 저장소를 참고하세요.