Видобування тексту з 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");
C
int err = 0;
char *text = office_extract_text("report.docx", &err);
if (text) {
printf("%s\n", text);
office_oxide_free_string(text);
}
Перевикористовуваний 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();
C
int err = 0;
OfficeDocumentHandle *doc = office_document_open("report.docx", &err);
if (!doc) { fprintf(stderr, "open failed: code=%d\n", err); return 1; }
char *text = office_document_plain_text(doc, &err);
char *md = office_document_to_markdown(doc, &err);
/* use text / md ... */
office_oxide_free_string(text);
office_oxide_free_string(md);
office_document_free(doc);
Що отримуєте для кожного формату
| Формат | Вивід |
|---|---|
| DOCX | Текст body у порядку документа + верхні та нижні колонтитули; м’які переноси видаляються |
| XLSX | Значення клітинок з усіх листів, у рядку через табуляцію, між листами — порожній рядок |
| PPTX | Заголовок слайда, body-плейсхолдери, клітинки таблиць і нотатки — один абзацний блок на слайд |
| DOC | Та сама структура, що й DOCX — парситься безпосередньо з piece-table CFB |
| XLS | Та сама структура, що й XLSX — парситься безпосередньо з BIFF8-записів |
| PPT | Та сама структура, що й PPTX — парситься з потоку PowerPoint Document |
З байтів (без тимчасового файлу)
Зручно для serverless та стрімінгових пайплайнів.
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();
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());
C
/* format must be one of: "docx" "xlsx" "pptx" "doc" "xls" "ppt" (lowercase) */
int err = 0;
OfficeDocumentHandle *doc =
office_document_open_from_bytes(data, len, "docx", &err);
if (doc) {
char *text = office_document_plain_text(doc, &err);
if (text) { printf("%s\n", text); office_oxide_free_string(text); }
office_document_free(doc);
}
WASM
import { WasmDocument } from 'office-oxide-wasm';
const res = await fetch('https://example.com/report.docx');
const data = new Uint8Array(await res.arrayBuffer());
using doc = new WasmDocument(data, 'docx');
console.log(doc.plainText());
Продуктивність
| Формат | Середнє | p99 | Успішність |
|---|---|---|---|
| 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 для прев’ю та вбудовування
- Формат-незалежний IR — структурований JSON для пайплайнів та LLM
- Таблиці — структуровані рядки з XLSX, DOCX, PPTX