# text.extract Reine Textextraktion aus PDF- und DOCX-Dokumenten. Pure-Rust, in-WASM, ohne deklarierte Berechtigungen. Der kanonische erste Schritt in Flows, die Rohtext brauchen — anonymisieren, zusammenfassen, übersetzen, per LLM klassifizieren, Audit-redigieren. ## Capability - `text.extract@0.1.0` ## Eingaben | Name | Typ | Beschreibung | | ---------- | ----- | ------------------------------------------------------- | | `document` | bytes | Das zu extrahierende Dokument. MIME-Typen siehe unten. | Akzeptierte MIME-Typen (deklariert in `module.yaml#accepts_mime`, von Studio als File-Picker-Filter gelesen): - `application/pdf` - `application/x-pdf` - `application/vnd.openxmlformats-officedocument.wordprocessingml.document` Andere MIME-Typen werden mit `invalid_input` abgelehnt — vor jedem Parsen. ## Ausgabe | Name | Typ | Beschreibung | | ----------- | ---- | --------------------------------------------- | | `extracted` | json | `ExtractedDocument`-Schema siehe unten. | ```json { "engine": "pdf-extract", "engine_version": "0.7", "pages": [ { "number": 1, "text": "…" } ] } ``` `confidence` und `bbox` pro Seite sind im Schema für eine spätere Service-Mode-Variante (pdfium / mupdf via Host-Services) reserviert. v0.1.0 setzt diese Felder nicht; das Schema akzeptiert sie als optional. ## Berechtigungen Keine. Reine Rust-Pipeline (`pdf-extract`, `zip`, `quick-xml`). Kein Dateisystem, kein Netz. `permissions: []` in `module.yaml` macht das explizit; der Hub erzwingt es. ## Grenzen in v0.1.0 - **Layout-naives PDF.** Mehrspaltige oder tabellenlastige Dokumente können umsortierten Text liefern. Ein-Spalten- Fließtext ist solide. - **Kein OCR.** Gescannte (nur-Bild-)PDFs liefern pro Seite leeren Text. Künftiges `text.ocr@^0` als Vor-Schritt. - **Nur DOCX bei Office.** `.doc` (Altformat), `.rtf`, `.odt` noch nicht unterstützt. `1.0.0` setzt entweder die Service-Mode-Variante (pdfium-Qualität + Layout) voraus oder einen nachgewiesen-guten Extraktions-Score auf einem repräsentativen Korpus. ## Beispiel-Flow ```yaml name: extract-anonymise inputs: document: bytes steps: - id: extract use: text.extract@^0 with: document: $inputs.document - id: redact use: text.anonymize@^0 with: text: $extract.extracted.pages[*].text outputs: redacted: $redact.anonymized ``` ## Build ```bash cargo build --release --target wasm32-wasip2 # Ausgabe: target/wasm32-wasip2/release/text_extract.wasm ```