Skip to content

feat(reader): PDF form-feed를 --- Page N --- 마커로 변환#31

Merged
epicsagas merged 3 commits into
mainfrom
orbit-pdf-page-markers
Jun 9, 2026
Merged

feat(reader): PDF form-feed를 --- Page N --- 마커로 변환#31
epicsagas merged 3 commits into
mainfrom
orbit-pdf-page-markers

Conversation

@epicsagas

Copy link
Copy Markdown
Owner

Summary

PDF 텍스트 추출 시 form-feed(\f) 문자를 --- Page N --- 마커로 치환합니다.

Motivation

Evidence Retrieval 파이프라인에서 검색 결과 snippet의 페이지 번호가 필요합니다. PPTX가 이미 --- Slide N --- 패턴을 사용하는 것과 동일한 방식으로 PDF에 적용합니다.

Changes

파일 변경
src/index/reader.rs inject_page_markers() 헬퍼 추가, pdf_extractpdftotext 양 경로에 적용
src/index/mod.rs 단위 테스트 4개 추가

Non-Impact

  • SCHEMA_VERSION 변경 없음 → 기존 인덱스 리빌드 불필요
  • FileReader trait 시그니처 변경 없음
  • Chunk / Builder / Searcher / Server / Tools 변경 없음
  • Markdown/코드 인덱싱 동작 변화 없음

Test Results

test inject_page_markers_single_page     ... ok
test inject_page_markers_two_pages       ... ok
test inject_page_markers_three_pages     ... ok
test inject_page_markers_no_formfeed_is_noop ... ok
test result: ok. 4 passed; 0 failed

Audit

  • Quality: PASS — 2개 파일, 73줄 추가, spec 범위 내
  • Security: PASS — 외부 입력 처리 없음, 문자열 변환만
  • Performance: PASS — 단일 split+map, O(n) 텍스트 크기
  • Spec Coverage: AC1✅ AC2✅ AC3✅ AC4✅ AC5✅

epicsagas added 3 commits June 9, 2026 13:45
pdftotext와 pdf_extract 양 경로에서 \f(form-feed)를
--- Page N --- 마커로 치환하는 inject_page_markers() 추가.

- 첫 페이지는 마커 없이 유지 (N은 1-based)
- PPTX의 --- Slide N --- 패턴과 일관성 유지
- FileReader trait 시그니처 변경 없음
- SCHEMA_VERSION 변경 없음 → 기존 인덱스 리빌드 불필요
- Evidence Retrieval 파이프라인에서 snippet으로 페이지 번호 확인 가능
- collect::<Vec<_>>().join("") → iter::once + chain + collect::<String>()으로 중간 힙 할당 제거
- i == 0 분기 제거: first 페이지를 split.next()로 분리하고 나머지를 enumerate(i+2)로 처리
- 테스트 3개 추가: 빈 문자열, 앞쪽 form-feed, 끝쪽 form-feed edge case 커버
@epicsagas epicsagas merged commit 4bf214a into main Jun 9, 2026
20 checks passed
@epicsagas epicsagas deleted the orbit-pdf-page-markers branch June 9, 2026 07:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant