Xberg document extraction and chunking pipeline for txtai embeddings
Project description
txtai-xberg
Feed Xberg document extraction into txtai. XbergPipeline is a plain callable that extracts text and metadata from 98+ formats — running OCR where needed — and flattens the result into documents ready for txtai.Embeddings.index. When you enable Xberg's native chunking, each chunk becomes one embedding-sized segment instead of a single blob.
Install
pip install txtai-xberg
Requires Python 3.10+. Install the txtai extra (pip install "txtai-xberg[txtai]") if txtai isn't already in your environment.
Extract
Call the pipeline with a path or a list of paths. A string returns one document; a list returns documents in input order. Batches run through Xberg's extract_batch in a single native call.
from txtai_xberg import XbergPipeline
pipeline = XbergPipeline()
doc = pipeline("report.pdf")
print(doc["content"]) # extracted markdown
print(doc["metadata"]["title"]) # source, mime_type, title, authors, languages, page_count
docs = pipeline(["report.pdf", "notes.docx"])
Index into txtai
Use to_documents to get (id, text, tags) tuples and hand them straight to Embeddings.index. Enable Xberg chunking so segments arrive sized for the model, with heading and page context in each document's tags.
from txtai import Embeddings
from txtai_xberg import XbergPipeline
from xberg import ChunkingConfig, ExtractionConfig
pipeline = XbergPipeline(
config=ExtractionConfig(chunking=ChunkingConfig(max_characters=1000, overlap=200)),
)
documents = pipeline.to_documents(["report.pdf", "notes.docx"])
embeddings = Embeddings(path="sentence-transformers/all-MiniLM-L6-v2", content=True)
embeddings.index(documents)
for result in embeddings.search("quarterly revenue", 3):
print(result["id"], result["text"])
Without a chunking config, to_documents emits one document per file. Chunk ids are "<source>#<chunk_index>".
Configure extraction
Pass any Xberg ExtractionConfig to control OCR, output format, chunking, and concurrency.
from xberg import ExtractionConfig, OcrConfig
pipeline = XbergPipeline(
config=ExtractionConfig(
output_format="markdown",
ocr=OcrConfig(language="eng"),
force_ocr=True,
max_concurrent_extractions=8,
),
)
Async
Already inside an event loop? Use the async methods — await pipeline.acall(paths) and await pipeline.ato_documents(paths). The synchronous __call__ and to_documents wrap these with asyncio.run and must not run inside a running loop.
Errors
Per-input failures in a batch surface as an ExtractionFailedError, whose errors attribute holds Xberg's ExtractionErrorItem objects (each with an index, source, code, and message).
For the full API, see the Xberg documentation.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file txtai_xberg-1.0.0.tar.gz.
File metadata
- Download URL: txtai_xberg-1.0.0.tar.gz
- Upload date:
- Size: 9.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cd7255c44ea22d775828c6b23abfd44d027f79967035858ff704e7d28a2ff7cc
|
|
| MD5 |
fdbc79a32d0a291c20b7e0cc95fa0c68
|
|
| BLAKE2b-256 |
1a379122a75a26cc71bf8b9adf68e6307ac86f207bdd13de62422cb9d48d1f24
|
File details
Details for the file txtai_xberg-1.0.0-py3-none-any.whl.
File metadata
- Download URL: txtai_xberg-1.0.0-py3-none-any.whl
- Upload date:
- Size: 7.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c295c11f3355dc40e0eb6aecfadde05436ef97f9823aff16c080cc4c458188ce
|
|
| MD5 |
99773c2079eec403818cd33bf48c879d
|
|
| BLAKE2b-256 |
7ec3856eab98d1eb29227bbd0b619d30489ca24c2a4667e47c63a9c8cc7319d6
|