PDF의 성격만 빠르게 가려내 불필요한 OCR 비용을 줄이는 로컬 도구
수백 페이지 분량의 PDF를 열어보지 않고도 텍스트가 있는지, 아니면 스캔 이미지인지 10~50밀리초 만에 알아차립니다. 이 도구는 PDF의 내용을 직접 분석해 텍스트 기반인지 스캔본인지 분류하고, 텍스트가 있는 경우에만 빠르게 마크다운으로 변환합니다. 불필요한 광학 문자 인식(OCR) 과정을 건너뛰어 처리 속도와 비용을 동시에 줄여줍니다.
스마트 라우팅으로 처리 비용 절감
대부분의 PDF 파이프라인은 모든 파일을 동일한 방식으로 처리합니다. 하지만 텍스트가 이미 포함된 PDF에 OCR을 적용하면 시간과 비용만 낭비합니다. 이 도구는 PDF의 콘텐츠 스트림을 샘플링하여 텍스트 기반, 스캔, 이미지 기반, 혼합 유형으로 분류합니다. 텍스트 기반 파일로 판정되면 로컬에서 200밀리초 이내에 마크다운 변환을 완료하고, OCR이 필요한 페이지만 선별적으로 처리합니다. README에 따르면 전체 PDF의 약 54%가 OCR 없이 처리 가능하다고 합니다.
레이아웃을 이해하는 텍스트 추출
단순한 텍스트 나열이 아닌, 문서의 구조를 파악하여 마크다운으로 변환합니다. 글꼴 크기 비율을 분석해 H1부터 H4까지의 제목 계층을 구분하고, 글꼴 이름 패턴으로 굵기나 기울임을 적용합니다. 다중 열 레이아웃을 자동으로 감지해 신문식 기사의 읽기 순서를 올바르게 재구성합니다. 표는 사각형 도형 기반과 텍스트 정렬 기반의 이중 모드로 감지하여 재무제표나 각주, 페이지를 넘나드는 연속 표도 처리합니다. 회전된 텍스트(여백 스탬프, 차트 축 제목)는 원래의 축 정렬 박스를 유지하고 회전 각도를 보고합니다.
다양한 환경에서의 실행
Rust 라이브러리, CLI 도구, Python, Node.js, 브라우저 WebAssembly 환경에서 모두 사용할 수 있습니다. 기본 빌드는 순수 추출 기능만 포함하여 가볍게 유지되며, OCR이 필요한 경우에만 외부 라이브러리를 로드합니다. Python과 Node.js 패키지는 선택적 OCR 기능을 내장하고 있어, 텍스트가 깨끗한 PDF는 외부 OCR 런타임을 로드하지 않습니다. 브라우저에서는 서버 왕복 없이 로컬에서 동일한 파서를 실행할 수 있습니다.
벤치마크 결과와 적합성
opendataloader-bench 코퍼스(200개 PDF)에서 OCR을 비활성화한 상태로 평가했습니다. pdf-inspector는 종합 점수 0.875, 읽기 순서(NID) 0.915, 표(TEDS) 0.814, 제목(MHS) 0.788을 기록했으며, 200개 문서 처리 속도는 0.470초였습니다. 이는 비교 대상인 liteparse, opendataloader, pymupdf4llm, markitdown보다 높은 점수와 빠른 속도를 보였습니다. 특히 표 구조와 읽기 순서가 중요한 보고서, 연구 논문, 재무 문서, 청구서, 법률 문서에 적합합니다. OCR 지연이나 인프라 추가 없이 깨끗한 구조화된 마크다운이 필요한 로컬 환경의 기본 도구로 사용할 수 있습니다.
사용 전 확인 사항
이 도구는 텍스트 기반 PDF에서 가장 높은 성능을 발휘합니다. 스캔본이나 이미지 기반 PDF의 경우 OCR 라우팅이 필요하며, 이 경우 PDFium과 ONNX Runtime 라이브러리를 별도로 설치해야 합니다. OCR 기능은 Rust와 CLI 사용자의 경우 빌드 시점에 선택해야 하며, Python과 Node.js는 패키지에 포함되어 있습니다. MIT 라이선스로 배포되며, 재현 가능한 결과 브랜치에서 파서 설정, 문서별 예측, 평가자 출력을 확인할 수 있습니다. 대규모 PDF 처리 파이프라인에서 OCR 비용을 줄이고 싶은 경우, 또는 로컬에서 빠른 마크다운 변환이 필요한 경우 적합합니다.