Skip to content

Конвертація 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)
Зображення плейсхолдер ![alt](filename) — див. «Зображення» нижче

Зображення

to_markdown() видає плейсхолдери з іменем (наприклад, ![](image1.png)), але не витягує байти — 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× витрат на медіанному документі. Повні цифри — у Продуктивності.

Дивіться також