firecrawl/pdf-inspector

Fast Rust library for PDF inspection, classification, and text extraction. Intelligently detects scanned vs text-based PDFs to enable smart routing decisions.

pdf-inspector – 빠르고 스마트한 PDF 분류 및 추출

주요 기능

  • PDF가 텍스트 기반, 스캔본, 이미지 기반 또는 혼합형인지 빠르게 판단(10-50 ms)하고 신뢰도 점수를 제공합니다.
  • 텍스트 기반 PDF의 경우, 레이아웃 정보(글꼴, X/Y 좌표, 회전)를 포함한 텍스트를 추출하여 문서를 깔끔한 Markdown으로 변환합니다.
  • 제목, 목록, 코드 블록, 표(사각형 기반 및 휴리스틱), 굵게/기울임꼴, URL, 페이지 나누기 등을 감지합니다.
  • 선택적 선택적 OCR: 추출 가능한 텍스트가 없는 페이지만 로컬 PP-OCRv6 모델로 전송하여 전체 문서 OCR로 인한 지연을 방지합니다.
  • 네이티브 Rust crate, CLI (pdf2md / detect-pdf), Python 및 Node.js 패키지, 브라우저용 WebAssembly 빌드로 제공됩니다.

중요한 이유

  • 웹상의 PDF 중 약 절반은 이미 텍스트 기반입니다. 모든 문서에 OCR을 실행하면 CPU와 비용이 낭비됩니다. pdf-inspector를 사용하면 실제로 스캔이 필요한 페이지만 OCR로 라우팅하여 비용과 지연 시간을 줄일 수 있습니다.
  • 이 라이브러리는 PDF를 한 번만 파싱하고 감지와 추출 과정에서 해당 표현을 공유하므로 전체 파이프라인이 가속화됩니다.
  • 200개의 PDF 코퍼스 벤치마크에서 전체적인 품질, 읽기 순서, 표 처리, 속도(대체 도구가 수 초 걸리는 반면 전체 세트 처리 시 0.47초) 면에서 유사 도구보다 뛰어난 성능을 보입니다.

사용 방법

  • Rust: cargo add pdf-inspector; process_pdf("file.pdf")를 호출하여 pdf_type 및 선택적 Markdown을 가져옵니다.
  • Python: pip install pdf-inspector; pdf_inspector.process_pdf("file.pdf").
  • Node: npm install @firecrawl/pdf-inspector; processPdf(buffer).
  • 브라우저: WASM 패키지를 가져와 processPdf(uint8Array)를 호출합니다.
  • CLI: pdf2md file.pdf로 Markdown 추출, detect-pdf file.pdf로 분류만 수행합니다.

기술적 세부 사항

  • 분류는 몇 페이지를 샘플링하여 텍스트(Tj/TJ)와 이미지(Do) 연산자를 확인합니다.
  • 추출은 PDF 콘텐츠 스트림을 탐색하여 글꼴 메트릭과 위치가 포함된 TextItem을 구축한 다음, 이를 행, 열, 표로 그룹화합니다.
  • 표 감지는 그리기 명령의 사각형 감지와 텍스트의 휴리스틱 정렬을 결합합니다.
  • Markdown 변환은 글꼴 크기 비율을 사용하여 제목 수준을 결정하고, 글꼴 이름 패턴을 사용하여 굵게/기울임꼴을 결정합니다.

사용 권장 사례

  • 대량의 PDF(보고서, 연구 논문, 청구서, 법률 문서)를 빠르고 로컬에서 처리해야 할 때.
  • 클라우드 OCR 서비스 비용을 지불하지 않고 표와 올바른 읽기 순서가 포함된 구조화된 Markdown을 원할 때.
  • Rust, Python, Node 또는 브라우저를 사용할 수 있는 환경에서 실행 중이며, 필요에 따라 선택적 PDFium/ONNX Runtime 라이브러리를 설치할 수 있을 때.

라이선스: MIT.

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트