xberg-batch-extraction
Use when extracting from many files at once with shared config, bounded parallelism, per-file…
Use when extracting tabular data from PDFs, spreadsheets, or images. Covers layout-aware table detection, table model selection, output formats (markdown / JSON cells), and known limits.
$ npx -y skills add xberg-io/xberg --skill xberg-extracting-tables --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/xberg-extracting-tablesContext preview
The summary Claude sees to decide when to auto-load this skill.
Use when extracting tabular data from PDFs, spreadsheets, or images. Covers layout-aware table detection, table model selection, output formats (markdown / JSON cells), and known limits.
description: Use when extracting tabular data from PDFs, spreadsheets, or images. Covers layout-aware table detection, table model selection, output formats (markdown / JSON cells), and known limits. name: xberg-extracting-tables
<!-- AI-RULEZ :: GENERATED FILE — DO NOT EDIT Content-Hash: blake3:80d26904ff70da39df4ee2b35bcfc06a186b30c0d2566cf4b60832cd42e475ef Source-Hash: blake3:662aa704cf97ad20f02258c9dcd1c73822213a426e27ec7ebc292d3f599fb7c2 Schema-Version: v1 -->
Use this when the user wants structured tabular data — financial statements, scientific tables, invoices, spreadsheet-style PDFs. Xberg detects tables via a layout model (RT-DETR v2) and reconstructs cell structure with a configurable table model.
# Markdown tables embedded in the content stream xberg extract report.pdf --layout --content-format markdown # Structured JSON output, tables appear under result.tables xberg extract report.pdf --layout --format json
`--layout` turns on layout-aware extraction; without it, tables fall back to plain text reflow and you lose cell boundaries.
Two surfaces, picked via `--format` (CLI shape) and `--content-format` (content rendering):
appear inline as `| col | col |` blocks. Good for LLM ingestion.
`cells[][]` (rows × cols), `markdown` (pre-rendered), `page_number`, `bounding_box`. Use this when downstream code needs exact cell access. (`bounding_box` is omitted when no position data is available.)
Both are populated at once when `--layout` is on. The `tables` array is always structured; the `content` stream switches representation.
xberg extract financials.pdf --layout --format json \
| jq '.result.tables[] | {page: .page_number, rows: (.cells | length)}'`--layout-table-model` picks the reconstruction backend:
| Model | Best for | Notes | | ------------------ | ----------------------------------------------------- | ------------------------------------------- | | `tatr` | dense complex tables (academic, financial) | **Default.** Heaviest, highest accuracy. | | `slanet_auto` | dispatches per-table to wired/wireless | Good when table styles are mixed. | | `slanet_wired` | tables with visible borders | Faster than tatr. | | `slanet_wireless` | tables without borders (whitespace-separated) | For invoices, simple grids. | | `slanet_plus` | hybrid wired / wireless | Lighter than `slanet_auto`. | | `disabled` | layout detection only, no table structure | Use to skip table model cost. |
xberg extract bank-statement.pdf \ --layout --layout-table-model tatr --content-format markdown
Drop `--layout-confidence` when the layout model misses tables (default threshold ~0.5):
xberg extract noisy-scan.pdf --layout --layout-confidence 0.3
`.xlsx`, `.ods`, `.csv`, `.tsv` are extracted by dedicated parsers — no layout model needed. Each sheet becomes a markdown table (or structured table) automatically:
xberg extract workbook.xlsx --content-format markdown xberg extract data.csv --format json
Pass `--no-cache=true` only when iterating on the same file with different configs.
# `output_format` in config files equals `--content-format` on the CLI. output_format = "markdown" [layout] confidence_threshold = 0.5 table_model = "tatr"
Then:
xberg extract report.pdf --format json
From Python, structured tables live on the document in the result envelope (`result.results[0].tables`):
from xberg import ExtractInput, extract, ExtractionConfig, LayoutDetectionConfig
config = ExtractionConfig(
layout=LayoutDetectionConfig(table_model="tatr"),
output_format="markdown",
)
result = await extract(ExtractInput(uri="report.pdf"), config)
for table in result.results[0].tables:
print(table.markdown) # rendered markdown
print(table.cells[0][0]) # cell accessNode.js mirrors this (`extract`, `output.results[0].tables`, camelCase fields). See `references/python-api.md` and `references/nodejs-api.md` for full type signatures.
region; the merge is not preserved as metadata.
PDFs before extraction.
lost.
Stitch by matching column headers if needed.
WASM builds and on the Android x86_64 emulator; native targets ship full support.
table model mismatched. Drop `--layout-confidence` to 0.3, try `--layout-table-model tatr`.
`slanet_wired` for bordered grids or `slanet_wireless` for invoices.
`slanet_plus` as a default; reach for `tatr` only when accuracy matters.
See `references/cli-reference.md` for the full layout flag set and `references/advanced-features.md` for the layout pipeline internals.
The fast, precise document-intelligence engine — for every language. Point Xberg at anything — a PDF, a scanned image, a spreadsheet, an audio file, a URL, a whole archive, or a source tree — and get back clean text, tables, metadata, and structured data.
Repo: kreuzberg-dev/kreuzberg
Use when extracting from many files at once with shared config, bounded parallelism, per-file…
Use when splitting extracted text into chunks for LLM context windows or RAG ingestion.…
Use when extracting keywords (YAKE/RAKE) from documents — and, secondarily, when detecting…
Use when extracting text from scanned PDFs, photographed pages, or images that have no…
Use when choosing an output format for extracted documents — plain text, markdown, djot,…
Extract text, tables, metadata, and images from 107 document formats (PDF, Office, images,…