본문으로 건너뛰기

트렌딩 - GitHub 인기 레포 & HuggingFace 모델

firecrawl/anydoc

Rust0 / 0

Rust core와 다중 언어 binding으로 14종 문서를 일관된 Markdown으로 변환하는 SDK

TL;DR

anydoc은 여러 Office 문서와 PDF를 Rust 기반 공통 Document 모델로 변환한 뒤 일관된 GitHub-Flavored Markdown을 출력하는 library-SDK다. Rust crate, Node.js와 Python bindings, WebAssembly, CLI, Agent Skill을 함께 제공해 서버 pipeline, 스크립트, 브라우저, coding agent에서 같은 변환 경로를 사용할 수 있다. 형식 내부 marker 기반 detection, 표와 각주 및 embedded assets 처리, Node.js event loop 비차단과 Python GIL 해제가 주요 구현 특징이다. README 벤치마크에서는 14개 형식 지원과 4.4ms median, score 81을 기록했지만 image-only PDF의 OCR과 암호화 문서 처리는 지원하지 않는다.

핵심 포인트

  • anydoc은 Word, PowerPoint, Excel, OpenDocument, RTF, EPUB, CSV, PDF를 하나의 Rust 문서 모델로 파싱한 뒤 공통 GFM Markdown serializer로 변환하는 library-SDK이다. 입력 확장자가 아니라 PDF header, RTF open group, OLE stream, ZIP mimetype 같은 파일 내부 marker를 먼저 읽어 형식을 판별한다. 여러 문서 형식을 받는 ingestion pipeline에서 출력 구조와 escaping 규칙을 통일하려는 경우에 적합하다.
  • 핵심 처리는 형식별 parser가 blocks, inlines, tables, footnotes, assets를 공유 Document 모델로 모은 뒤 단일 serializer가 Markdown을 생성하는 방식이다. 표의 merged cells와 header rows, 중첩 목록, 내부 cross-reference, speaker notes, embedded asset의 media type까지 공통 모델에서 다룬다. 특정 형식에서 발견한 table-escaping 수정이 다른 형식에도 적용되므로 형식별 출력 차이를 별도로 보정하는 코드가 줄어든다.
  • Rust core 위에 CLI, Node.js binding, Python binding, WebAssembly binding을 제공해 배치 변환부터 애플리케이션 내 처리와 브라우저 로컬 변환까지 같은 기능을 사용할 수 있다. Node.js는 libuv thread pool에서 변환하고 Python은 GIL을 해제하며 TypeScript types와 Python stubs도 함께 배포한다. 브라우저 WebAssembly demo는 파일을 로컬에서 변환해 파일이 외부로 전송되지 않는 사용 경로를 제공한다.
  • README 벤치마크에서 14개 형식을 모두 지원하고 median conversion time 4.4ms, 종합 score 81을 기록했으며 비교 대상 중 지원 형식 수와 judged format별 점수가 가장 높았다. 다만 image-only PDF는 OCR 없이 Unsupported로 처리되고 encrypted 또는 password-protected 파일도 Encrypted 오류가 발생한다. 스캔 문서 OCR이 필요하면 anydoc 단독보다 Firecrawl Parse의 OCR models가 포함된 hosted API가 맞다.

벤치마크

벤치마크지표비교
anydoc 전체 변환 벤치마크지원 형식 수14/14README의 100개 real-world documents·14개 formats 벤치마크에서 비교 도구 중 유일하게 14/14를 지원했다.
anydoc 전체 변환 벤치마크median conversion time4.4ms동일 README 벤치마크에서 libreoffice 1129.5ms, unstructured 572.9ms, docling 513.6ms, mammoth 52.5ms보다 낮게 측정됐다. CLI 도구는 process spawn을 포함하고 anydoc 및 Python libraries는 process spawn을 제외한 측정이다.
anydoc 전체 변환 벤치마크score81LLM judge가 completeness·structure·formatting·cleanliness를 평가한 README 수치이며 libreoffice 40, unstructured 63, markitdown 65, pandoc 56, docling 57, mammoth 70과 비교됐다. 각 도구가 지원하는 formats 집합이 달라 행마다 평균 대상이 다르다.
anydoc 전체 변환 벤치마크completeness87README의 blind LLM judge 평가에서 anydoc의 completeness 점수로, 종합 score 81의 구성 지표다.
anydoc 전체 변환 벤치마크structure79README의 blind LLM judge 평가에서 anydoc의 structure 점수로, 종합 score 81의 구성 지표다.
anydoc 전체 변환 벤치마크formatting78README의 blind LLM judge 평가에서 anydoc의 formatting 점수로, 종합 score 81의 구성 지표다.
anydoc 전체 변환 벤치마크cleanliness81README의 blind LLM judge 평가에서 anydoc의 cleanliness 점수로, 종합 score 81의 구성 지표다.

14.4k

Stars

753

Forks

+211

Trending

0

조회수

14.4k watchers52 open issuesMIT License

관련 토론

아직 관련 토론이 없습니다.

댓글

댓글을 작성하려면 로그인이 필요합니다.