Извлечение текста из Office-документов
Office Oxide даёт единственную точку входа — extract_text() (или Document.open(...).plain_text()), которая одинаково работает для DOCX, XLSX, PPTX, DOC, XLS и PPT. Никаких форматных веток.
Одноразовый помощник
Самый быстрый путь: один вызов открывает файл, запускает подходящий извлекатель и возвращает строку.
Rust
use office_oxide::extract_text;
let text = extract_text("report.docx")?;
println!("{text}");
Python
import office_oxide
text = office_oxide.extract_text("report.docx")
print(text)
JavaScript
import { extractText } from 'office-oxide';
console.log(extractText('report.docx'));
Go
import officeoxide "github.com/yfedoseev/office_oxide/go"
text, err := officeoxide.ExtractText("report.docx")
C#
using OfficeOxide;
string text = OfficeOxide.ExtractText("report.docx");
Переиспользуемый handle
Если кроме текста нужны и другие выходы (Markdown, HTML, IR) — открывайте документ один раз и переиспользуйте handle:
Rust
use office_oxide::Document;
let doc = Document::open("report.docx")?;
let text = doc.plain_text();
let md = doc.to_markdown();
Python
from office_oxide import Document
with Document.open("report.docx") as doc:
text = doc.plain_text()
md = doc.to_markdown()
JavaScript
import { Document } from 'office-oxide';
using doc = Document.open('report.docx');
const text = doc.plainText();
const md = doc.toMarkdown();
Что получаете для каждого формата
| Формат | Вывод |
|---|---|
| DOCX | Текст body в порядке документа + колонтитулы; мягкие переносы удаляются |
| XLSX | Значения ячеек по всем листам; внутри строки — табы, между листами — пустая строка |
| PPTX | Заголовок слайда, body-плейсхолдеры, ячейки таблиц и заметки — один блок-параграф на слайд |
| DOC | Та же форма, что и DOCX — парсится прямо из piece-table CFB |
| XLS | Та же форма, что и XLSX — парсится прямо из записей BIFF8 |
| PPT | Та же форма, что и PPTX — парсится из стрима PowerPoint Document |
Из байтов (без temp-файла)
Удобно для serverless и стриминговых пайплайнов.
Python
import requests
from office_oxide import Document
data = requests.get("https://example.com/report.docx").content
with Document.from_bytes(data, "docx") as doc:
print(doc.plain_text())
JavaScript
import { Document } from 'office-oxide';
const res = await fetch('https://example.com/report.docx');
const data = new Uint8Array(await res.arrayBuffer());
using doc = Document.fromBytes(data, 'docx');
console.log(doc.plainText());
Rust
use std::io::Cursor;
use office_oxide::{Document, DocumentFormat};
let data = std::fs::read("report.docx")?;
let doc = Document::from_reader(Cursor::new(data), DocumentFormat::Docx)?;
let text = doc.plain_text();
Производительность
| Формат | Среднее | p99 | Pass rate |
|---|---|---|---|
| DOCX (2 538 файлов) | 0.8 мс | 3.9 мс | 98.9% |
| XLSX (1 802 файла) | 5.0 мс | 40 мс | 97.8% |
| PPTX (806 файлов) | 0.7 мс | 3.9 мс | 98.4% |
| DOC (246 файлов) | 0.3 мс | 3.4 мс | 94.7% |
| XLS (494 файла) | 2.8 мс | 75 мс | 99.2% |
| PPT (176 файлов) | 0.7 мс | 6.6 мс | 100% |
Полная методология бенчмарков — Производительность.
Смотрите также
- Извлечение Markdown — тот же API, GitHub-flavored вывод
- Извлечение HTML — семантический HTML для preview и embed
- Формат-независимый IR — структурированный JSON для пайплайнов и LLM
- Таблицы — структурированные строки из XLSX, DOCX, PPTX