Skip to content

Видобування тексту з 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 у порядку документа + колонтитули; soft-hyphen вирізаються
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%

Повна методологія бенчмарків — Продуктивність.

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