# PRD: PDFtoMD

## 목표
PDFtoMD는 수학, 공학, 역학 중심의 PDF 문서를 AI Agent가 쉽게 접근하고 읽을 수 있는 Obsidian 친화 Markdown 문서 묶음으로 변환하는 프로그램이다.

이 프로젝트의 목표는 PDF의 텍스트를 단순 추출하는 것이 아니라, 원문 문서의 논리 구조와 출처 추적성을 보존하면서 AI가 탐색 가능한 지식 자료로 재구성하는 것이다.

## 사용자
- PDF 문서를 Markdown으로 변환해 AI Agent, RAG, 개인 지식 관리 도구에 활용하고 싶은 사용자
- 수식, 표, 이미지가 많은 논문/공학 문서를 Obsidian에서 읽고 관리하고 싶은 사용자
- 긴 PDF를 여러 Markdown 파일과 index로 나누어 부분 탐색하고 싶은 사용자

## 1차 MVP 범위
- Windows native 환경에서 완전 로컬 실행
- GPU 기본 사용, VRAM 8GB 환경을 기준으로 안정적인 chunk 처리
- PDF parser는 `Marker`를 기본 엔진으로 사용
- PDF 텍스트를 Markdown 문단과 heading 구조로 변환
- PDF 내 수식을 Obsidian 렌더링이 가능한 LaTeX Markdown으로 변환
- PDF 내 이미지를 추출하고 Markdown에서 연결
- 이미지의 figure 번호, 캡션, 원본 페이지 정보를 가능한 한 보존
- PDF 내 표를 구조화하고 Markdown table, HTML table, CSV 중 적절한 방식으로 출력
- 페이지 수가 많은 문서를 20페이지 단위 chunk로 분할 변환
- AI Agent가 쉽게 접근할 수 있도록 chunk 파일, heading, 문단, line 위치, 원본 page 정보를 연결하는 index 파일 생성
- 변환 설정, 경고, 실패 chunk, 처리 시간 등 진단 정보를 metadata/log로 보존

## 2차 범위
- PyQt 기반 Windows UI
- 외부 API를 선택적으로 활용하는 수식 복구, 이미지 설명, 품질 검토 기능
- Marker 외 parser engine fallback 또는 비교 실행
- 고급 Obsidian vault 연동

## 핵심 기능
1. PDF 문서를 Obsidian 친화 Markdown 문서 묶음으로 변환
2. 수식을 `$ ... $` 또는 `$$ ... $$` 형식의 LaTeX로 보존
3. 논문에서 자주 쓰이는 다중 컬럼 문서를 Markdown의 선형 구조로 재배치
4. 이미지 추출 및 Markdown 연결
5. 표 구조화 및 표 유형별 Markdown/HTML/CSV 출력
6. 긴 PDF를 여러 chunk Markdown 파일로 분할 변환
7. chunk/heading/문단별 접근을 돕는 index 파일 생성
8. 원본 PDF page, page range, block id, bbox 등 출처 추적 정보 보존
9. 중간 실패 후 실패 chunk만 재시도 가능한 변환 상태 관리
10. `samples/` PDF 기반 품질 검증과 회귀 테스트 지원

## 품질 기준
- 원문 읽기 순서가 Markdown에서 자연스럽게 유지되어야 한다.
- heading, 본문, 리스트, 인용, 표, 그림, 수식의 의미 역할이 구분되어야 한다.
- 수식 delimiter와 기본 LaTeX 구조가 깨지지 않아야 한다.
- 이미지와 캡션, figure 번호, 본문 참조가 가능한 한 연결되어야 한다.
- 표는 구조 손실을 최소화하는 형식으로 저장되어야 한다.
- index 파일에서 원하는 섹션이나 문단의 Markdown 위치와 원본 PDF page를 찾을 수 있어야 한다.
- Windows 경로, 한글 파일명, 긴 문서, GPU 메모리 부족 상황을 고려해야 한다.

## UI
- UI는 2차 목표로 PyQt를 사용한다.
- UI는 변환 엔진을 직접 구현하지 않고 CLI/라이브러리 계층을 호출하는 thin client로 둔다.
- 미니멀하고 깔끔한 Windows 표준 디자인을 따른다.
