markitdown
무엇인가
MarkItDown은 파일과 오피스 문서를 Markdown으로 바꾸는 Python 유틸리티이자 CLI다. 문서 텍스트 추출 계층에 속하며, LLM과 텍스트 분석 파이프라인의 입력을 만드는 전처리 단계에 놓인다. 출력물은 사람이 읽는 최종 문서가 아니라 분석 도구가 소비하는 중간 표현이다.
어떻게 동작하나
변환은 포맷별 컨버터가 담당하고 입력 종류에 따라 해당 컨버터로 디스패치된다. PDF, PowerPoint, Word, Excel, HTML, CSV·JSON·XML 같은 텍스트 포맷, EPub, ZIP을 다룬다. ZIP은 내부 항목을 순회하며 각각을 변환한다. 이미지는 EXIF 메타데이터와 OCR로, 오디오는 EXIF와 음성 전사로 텍스트를 얻는다. YouTube URL은 전사 결과를 가져온다. 포맷별 파서는 선택 의존성으로 분리되어 있어 필요한 extra만 골라 설치할 수 있다.
무엇과 다른가
같은 자리에 textract가 있다. 차이는 출력 형식에 있다. MarkItDown은 제목, 목록, 표, 링크 같은 문서 구조를 Markdown 문법으로 남기는 데 초점을 둔다. Markdown은 마크업이 적고 토큰 효율이 높아 LLM 입력으로 쓰기 좋다. 대신 사람이 보는 고충실도 변환을 목표로 하지 않는다.
어떻게 쓰나
설치 후 `markitdown 파일.pdf > 문서.md` 형태로 실행한다. `-o`로 출력 파일을 지정하거나 표준 입력으로 내용을 파이프할 수 있다. Python에서는 convert_stream(), convert_local() 같은 API를 호출한다. 이미지 설명에 쓰는 llm_client / llm_model을 그대로 넘겨 OCR 플러그인을 붙일 수 있다. 플러그인은 기본 비활성이고 목록 조회와 활성화 플래그로 켠다. Azure Document Intelligence와 Azure Content Understanding은 클라우드 변환 백엔드로 연결된다.
전제와 한계
Python 3.10 이상이 필요하다. 포맷별 기능은 선택 의존성에 달려 있어 설치하지 않은 포맷은 변환되지 않는다. 변환은 현재 프로세스의 권한으로 I/O를 수행하므로 신뢰할 수 없는 입력에서는 입력을 정제하고 convert_stream(), convert_local()처럼 범위가 좁은 함수를 호출해야 한다.
유사 도구
- doclingPDF·DOCX·PPTX 등 여러 문서 형식을 레이아웃과 표 구조까지 해석해 Markdown·JSON으로 내보내는 Python 라이브러리 겸 CLI다.
- markerPDF·이미지·오피스 문서를 마크다운·JSON·HTML로 변환하는 Python CLI다. 레이아웃 검출과 OCR을 로컬 VLM 서버로 처리하고 LLM으로 정확도를 보강한다.
- synthadocPDF·스프레드시트·영상 등 원본 문서를 LLM으로 컴파일해 출처 인용이 붙은 로컬 Markdown 위키로 만드는 Python CLI다.
- readerURL 앞에 https://r.jina.ai/ 를 붙이면 웹 페이지·PDF·오피스 문서를 LLM이 읽는 마크다운으로 변환하는 TypeScript 서비스다.
- crawl4ai웹 페이지를 LLM이 바로 읽는 Markdown과 구조화 JSON으로 바꾸는 비동기 Python 크롤러다. Playwright 브라우저 풀과 BM25 필터로 본문만 남긴다.