# Task-511: Docling 문서 파싱 도입

## 목표
Docling을 도입하여 InsuRo의 PDF 파싱을 고도화한다. 기존 pdfplumber 대비 표 구조 보존, 복잡한 레이아웃 처리, 다양한 포맷 지원을 확보한다.

## 상세 스펙
- 전체 스펙: `/home/jay/workspace/memory/specs/openrag-adoption-spec.md` 참조 (기능 1번)

## 현재 상태
- `/home/jay/projects/InsuRo/server/ai_parser.py`에서 pdfplumber로 PDF 텍스트 추출
- 현재 잘 동작하지만, 표(table) 구조 보존 안 됨, 스캔 PDF 미지원

## 구현 범위

### 1. Docling 설치 및 설정
- `pip install docling` 으로 라이브러리 직접 사용 (Docker 서버 방식 아님)
- requirements.txt에 추가
- GPU 없는 환경에서도 동작하도록 CPU 모드 설정

### 2. 문서 파싱 모듈
- 경로: `/home/jay/workspace/libs/doc_parser.py` (공통 라이브러리)
- `parse_pdf(file_bytes: bytes) -> ParseResult`
  ```python
  @dataclass
  class ParseResult:
      text: str              # 전체 텍스트
      pages: list[str]       # 페이지별 텍스트
      tables: list[dict]     # 표 데이터 [{headers: [], rows: [[]]}]
      metadata: dict         # 문서 메타데이터 (제목, 작성일, 페이지수 등)
  ```
- `parse_document(file_bytes: bytes, filename: str) -> ParseResult`
  - 파일 확장자로 포맷 자동 감지 (PDF, DOCX, PPTX, HTML, 이미지)
- 테이블 추출: Docling의 테이블 인식 기능 활용, 마크다운 테이블 형식으로 변환

### 3. InsuRo ai_parser.py 통합
- 기존 `extract_text_from_pdf()` 내부를 Docling 기반으로 교체
- **fallback 유지**: Docling 실패 시 pdfplumber로 자동 전환 (안정성)
- 표 데이터를 마크다운 형식으로 텍스트에 포함 (AI가 구조적으로 이해 가능)

### 4. 파싱 정확도 비교 테스트
- 테스트 대상: 금소법 PDF (`금융소비자_보호에_관한_법률법률제21065호20260102.pdf`)
  - 경로: `/home/jay/.cokacdir/workspace/autoset/금융소비자_보호에_관한_법률법률제21065호20260102.pdf`
- 비교 항목:
  1. 텍스트 추출 정확도 (글자 누락/오류)
  2. 표(table) 구조 보존 여부
  3. 조항 번호 정확성 (제1조, 제2조 등)
  4. 특수문자 처리 (「」, ㆍ 등)
  5. 처리 속도 비교
- 비교 결과를 보고서에 포함

### 5. 보험 약관 PDF 테스트 (가능하면)
- `/home/jay/projects/InsuRo/server/` 또는 Google Drive에 약관 샘플이 있으면 테스트
- 없으면 금소법 PDF로만 테스트 (보고서에 명시)

## 테스트
- doc_parser.py 단위 테스트
- pdfplumber vs Docling 비교 테스트 (금소법 PDF)
- fallback 동작 테스트 (Docling 실패 시 pdfplumber로 전환)
- 다양한 포맷 테스트 (PDF 외에 지원되는 포맷이 있으면)

## 주의사항
- Docling은 첫 실행 시 모델 다운로드가 필요할 수 있음 (시간 소요 보고)
- 메모리 사용량 확인 (기존 pdfplumber 대비)
- `/home/jay/workspace/libs/` 에 공통 라이브러리로 작성
- 기존 InsuRo 서버 동작에 영향 없도록 fallback 필수
- ai_parser.py 수정 시 기존 함수 시그니처 유지 (호환성)
