출처

개요

pdf-inspector는 PDF가 텍스트 기반인지 스캔본인지 OCR·머신러닝 없이 순수 Rust로 밀리초 단위에 분류하고, 텍스트 기반 PDF를 레이아웃 정보와 함께 마크다운으로 변환하는 Firecrawl의 라이브러리다. 문서를 한 번만 파싱한 결과를 감지와 추출 단계가 공유하며, 텍스트가 없는 페이지만 OCR로 보낼 수 있도록 pages_needing_ocr를 제공한다. 원문은 텍스트 기반 PDF를 로컬에서 200ms 안에 처리해 OCR이 필요 없는 PDF의 외부 OCR 호출을 줄이는 것을 목표로 설명한다.

핵심 포인트

  • PDF 유형 분류: TextBased, Scanned, ImageBased, Mixed와 0.0~1.0 신뢰도 점수를 반환하며, EarlyExit, Full, Sample(n), Pages(vec)로 검사 범위를 조절한다.
  • 선택적 OCR 라우팅: 텍스트가 없는 페이지 목록(pages_needing_ocr)과 깨진 폰트 인코딩 플래그를 제공해 문서 전체가 아닌 필요한 페이지만 OCR 대상으로 삼을 수 있다.
  • 레이아웃 인식 추출: 폰트·콘텐츠 스트림·Form XObject·하이퍼링크·AcroForm을 처리하고, 단 감지와 줄 그룹화로 읽기 순서를 정한다. 여러 단 구성과 RTL 텍스트도 대상으로 한다.
  • 마크다운 변환: 폰트 크기 기반 제목(H1~H4), 목록, 모노스페이스 기반 코드 블록, 굵게·기울임, 링크, 페이지 구분을 인식한다.
  • 표·문자 인코딩 처리: PDF 도형의 사각형과 텍스트 정렬 휴리스틱을 함께 사용해 표를 감지하고, CID 폰트의 ToUnicode CMap을 해석해 텍스트를 복원한다.
  • 성능 비교: 원문이 인용한 200개 PDF opendataloader-bench 평가에서 pdf-inspector의 종합 점수는 0.83, 표 점수는 0.66, 처리 시간은 4초였다. opendataloader는 종합 0.84·표 0.49·11초로 기록되어 pdf-inspector가 더 빨랐지만, 읽기 순서는 opendataloader가 조금 높았다.
  • 사용 표면과 라이선스: Rust 라이브러리, Python·Node.js 바인딩, CLI를 제공하며 lopdf 외부 의존성을 사용한다. MIT 라이선스로 공개되어 있다.

왜 중요한가

PDF 파이프라인에서 텍스트 기반 문서까지 외부 OCR로 보내면 비용과 지연이 추가될 수 있다. pdf-inspector는 먼저 문서 유형과 페이지별 OCR 필요 여부를 판단한 뒤 텍스트 추출과 OCR을 분기하는 구조를 제안하므로, 크롤링·데이터 수집 시스템에서 로컬 전처리와 선택적 OCR 라우팅을 설계할 때 참고할 수 있다. 다만 원문도 읽기 순서와 표 구조 정확도에서 다른 엔진 또는 시각 레이아웃을 활용하는 OCR 기반 엔진과의 차이를 언급한다.

후속으로 볼 링크 및 키워드