Конвертація Office-документів у Markdown
Кожен handle Office Oxide має метод to_markdown(), що видає GitHub-flavored Markdown — заголовки, таблиці, списки та блоки, схожі на код — із будь-якого з шести підтримуваних форматів. Саме цю точку входу варто використовувати більшості LLM/RAG-пайплайнів.
Одноразовий виклик
Rust
use office_oxide::to_markdown;
let md = to_markdown("report.docx")?;
std::fs::write("report.md", md)?;
Python
import office_oxide
md = office_oxide.to_markdown("report.docx")
open("report.md", "w").write(md)
JavaScript
import { toMarkdown } from 'office-oxide';
import { writeFileSync } from 'node:fs';
writeFileSync('report.md', toMarkdown('report.docx'));
Go
md, err := officeoxide.ToMarkdown("report.docx")
os.WriteFile("report.md", []byte(md), 0o644)
C#
File.WriteAllText("report.md", OfficeOxide.ToMarkdown("report.docx"));
Перевикористання handle
Python
from office_oxide import Document
with Document.open("deck.pptx") as doc:
md = doc.to_markdown()
Rust
let doc = office_oxide::Document::open("deck.pptx")?;
let md = doc.to_markdown();
JavaScript
using doc = Document.open('deck.pptx');
const md = doc.toMarkdown();
Що з’являється у виводі
| Початковий елемент | Markdown |
|---|---|
DOCX-заголовок (<w:pStyle w:val="Heading1"/> …) |
# Заголовок (рівень відповідно до стилю) |
| DOCX-абзац | Один абзац, soft-hyphen вирізаються |
| DOCX-пункт списку | - пункт або 1. пункт (нумерація зберігається) |
| DOCX-таблиця | GFM pipe-таблиця |
| XLSX-лист | ## Назва листа + pipe-таблиця для кожного діапазону |
| Об’єднані клітинки XLSX | Вміст першої клітинки, span відкидається |
| PPTX-слайд | ## Слайд N + body, нотатки додаються як blockquote |
| PPTX-таблиця | GFM pipe-таблиця inline у слайді |
| Гіперпосилання | [текст](url) |
| Зображення | плейсхолдер  — див. «Зображення» нижче |
Зображення
to_markdown() видає плейсхолдери з іменем (наприклад, ), але не витягує байти — Markdown це текстовий формат. Щоб дістати зображення, використайте IR або форматно-специфічний доступ:
from office_oxide import Document
with Document.open("report.docx") as doc:
ir = doc.to_ir()
for section in ir["sections"]:
for el in section["elements"]:
if el["kind"] == "Image":
print(el["filename"], len(el["data"]))
Повна схема — IR-видобування.
Сценарії
- RAG-інжест — Markdown найдружніший до LLM формат. Один прохід на документ, детермінована структура, без HTML-шуму.
- Індексація документів — заголовки дають природні межі чанків, таблиці залишаються queryable.
- Міграції — DOCX → Markdown для статичних генераторів (Hugo, Astro, MkDocs).
- Diff контенту — Markdown-діфи значно зручніші за бінарні
.docx-діфи.
Продуктивність
to_markdown() працює в тому ж порядку, що й plain_text() — зазвичай 1–2× витрат на медіанному документі. Повні цифри — у Продуктивності.
Дивіться також
- HTML-видобування — коли потрібен стилізований вивід
- IR-видобування — структурований JSON для багатших пайплайнів
- PDF for RAG — компаньйон
pdf_oxideдля PDF