Anydoc: конвертация документов в Markdown на Rust

Anydoc: конвертация документов в Markdown на Rust

Anydoc — это библиотека для конвертации документов (Word, PowerPoint, Excel и др.) в чистый Markdown. Она написана на Rust и предоставляет привязки для Node.js и Python.

Этот инструмент полезен для разработчиков, которым нужно преобразовать офисные документы в Markdown, например, для подготовки текста к публикации на GitHub. Anydoc гарантирует одинаковый результат независимо от исходного формата, что уменьшает риск ошибок в конвертации. Также доступна версия для браузера на WebAssembly, что позволяет обрабатывать файлы локально без передачи данных на сервер.

Запускается через CLI с командой npx @firecrawl/anydoc и поддерживает работу с различными агентами через интеграцию с Agent Skills. Обрати внимание, что, несмотря на мощные возможности, библиотека может не полностью справляться с некоторыми типами документов без дополнительных технологий, таких как OCR для отсканированных страниц.

Проект anydoc — это библиотека на Rust, которая преобразует документы различных форматов (таких как Word, PowerPoint, Excel, OpenDocument, RTF, EPUB, CSV и PDF) в чистый Markdown, совместимый с GitHub. Библиотека включает привязки для Node.js, Python и WebAssembly (браузер).

Основная цель создания anydoc — быстрое преобразование офисных документов в Markdown, пригодный для больших языковых моделей, с гарантированным единообразием результата вне зависимости от формата входного документа. Библиотека была разработана компанией Firecrawl и используется в рамках продукта Firecrawl Parse, предоставляющего API для конвертации документов с поддержкой оптического распознавания текста (OCR) для сканированных страниц.

Ты можешь попробовать библиотеку прямо в своем браузере: демо-страница, на которой библиотека работает как WebAssembly, позволяет конвертировать файлы локально, не загружая их на сервер.

Быстрый старт

Навыки агента

anydoc доступен как Agent Skill, что позволяет твоему агенту обрабатывать любые документы:

npx skills add firecrawl/anydoc

CLI

Примеры команд для использования библиотеки в командной строке:

npx @firecrawl/anydoc report.docx               # Вывод Markdown в стандартный вывод
npx @firecrawl/anydoc slides.pptx -o slides.md  # Или в файл
npx @firecrawl/anydoc - --format csv < data.csv # Чтение из stdin
npx @firecrawl/anydoc scan.pdf --ocr hosted     # Сканированные страницы через Firecrawl Parse

Node.js

Для установки в проект:

npm install @firecrawl/anydoc

Пример использования:

import { toDocument, toMarkdown, toMarkdownBytes } from '@firecrawl/anydoc';

// Из файла:
const markdown = await toMarkdown('report.docx');

// Чтобы включить OCR:
const markdown = await toMarkdown('report.docx', { ocr: 'hosted' });

// Из байтов, формат определяется автоматически:
const fromBytes = await toMarkdownBytes(bytes);

// Или укажи формат, если он не имеет сигнатуры (например, CSV):
const fromCsv = await toMarkdownBytes(bytes, 'csv');

// Или остановись на модели документа, которая также содержит встроенные ресурсы:
const document = await toDocument(bytes);

Python

Установка через pip:

pip install firecrawl-anydoc

Примеры кода:

import anydoc

# Из файла:
markdown = anydoc.to_markdown("report.docx")

# Чтобы включить OCR:
markdown = anydoc.to_markdown("report.docx", ocr="hosted")

# Из байтов, формат определяется автоматически:
markdown = anydoc.to_markdown_bytes(data)

# Или укажи формат, если он не имеет сигнатуры (например, CSV):
markdown = anydoc.to_markdown_bytes(data, "csv")

# Или остановись на модели документа:
document = anydoc.to_document(data)

Браузер (WebAssembly)

Установка:

npm install @firecrawl/anydoc-wasm

Код для работы с библиотекой:

import init, { toMarkdownBytes, toDocument } from '@firecrawl/anydoc-wasm';

await init();

// Из байтов, формат определяется автоматически:
const markdown = toMarkdownBytes(bytes);

// Или укажи формат, если он не имеет сигнатуры (например, CSV):
const fromCsv = toMarkdownBytes(bytes, 'csv');

// Или остановись на модели документа:
const document = toDocument(bytes);

Rust

Установка библиотеки:

cargo add anydoc

Пример использования:

// Из файла:
let markdown = anydoc::to_markdown("report.docx")?;

// Из байтов, формат определяется автоматически:
let markdown = anydoc::to_markdown_bytes(&bytes, None)?;

// Или укажи формат, если он не имеет сигнатуры (например, CSV):
let markdown = anydoc::to_markdown_bytes(&bytes, anydoc::Format::Csv)?;

// Или остановись на модели документа:
let document = anydoc::to_document(&bytes, None)?;

OCR

Библиотека anydoc может обрабатывать текстовые PDF локально, но не выполняет OCR. Если у тебя есть PDF с отсканированными или изображениями страницами, конвертация завершится с ошибкой NeedsOcr. Чтобы обработать такие документы, можно использовать опцию ocr: 'hosted'.

Особенности

  • Один выходной формат для всех входных. Каждый формат преобразуется в общую модель документа и рендерится через единый сериализатор для Markdown.
  • Полная структура документа с поддержкой заголовков, стилей, списков и таблиц.
  • Уравнения в формате LaTeX.
  • Встраиваемые ресурсы, такие как изображения, сохраняются и отображаются.
  • Ускоренное чтение формата на основе содержимого файла.
  • Быстрая конвертация, без использования внешних сервисов.
  • Совместимость с многими языками программирования и доступность через CLI.

Поддерживаемые форматы

ФорматРасширения
Word.doc, .docx, .docm
PowerPoint.ppt, .pps, .pot, .pptx, .pptm, .ppsx, .ppsm
Excel.xls, .xlsx, .xlsm, .xlsb
OpenDocument.odt, .ods, .odp
Rich Text Format.rtf
EPUB.epub
CSV.csv
PDF.pdf

Ограничения

Некоторые форматы могут не поддерживаться для конвертации, такие как зашифрованные документы или те, которые требуют OCR для работы с отсканированными страницами. В таких случаях конвертация завершится ошибкой.

Как это работает

anydoc выполняет следующие шаги:

  • Обнаружение формата на основе сигнатур в содержимом файла.
  • Парсинг формата в общую модель документа.
  • Сериализация на выход в Markdown.
  • Обработка PDF через встроенный инструмент.

Выводы одного формата обрабатываются единообразно, что избавляет от возможных ошибок при конвертации.

Лицензия

Проект лицензирован под MIT.

Открыть на GitHub: firecrawl/anydoc →

Что нового на GitHub — короткие обзоры на русском Новые обзоры приходят в Telegram. Без спама, по делу.
Подписаться

Похожие статьи

Популярные темы на сайте