Perception

Split

client.documents.split(source, *, classes, **options)

ParameterTypeRequiredDescription
sourcestr | UrlSource | WorkspaceFileSource | ParseResultSourceYesThe document to split.
classeslist[dict]YesThe document classes to cut on. See classes. Split's own options are on Split.
unknown_policy"include" / "force" / "error"Noinclude (default) keeps unmatched pages as unclassified, force gives them the best class, error fails the job.
overlap_policy"exclusive" / "shared_boundary_page"Noexclusive (default) keeps segments apart; shared_boundary_page puts a boundary page in both neighbors.
split_rulesstrNoFree-text guidance on how to cut the packet.
outputdictNoWhat each segment holds. See output.
page_rangeslist[dict]NoOne-based, inclusive ranges. Not for workbooks. Default: all pages.
parse_mode"low" / "medium" / "high"NoEffort of the parse Split runs first. Default: "low", the only value a parse_result source takes.

Each dict option takes these keys:

classes

One entry per class, each a dict:

KeyTypeDefaultDescription
classes[].idstrRequiredThe class's id.
classes[].labelstrRequiredThe class's name.
classes[].descriptionstr""What belongs in the class.
classes[].subclasseslist[dict]NoneFiner classes under this one, each with subclasses[].id and subclasses[].label (both required) and an optional subclasses[].description.
classes[].instance_keydictNoneA value that tells one document of the class from the next, such as an invoice number.
classes[].instance_key.namestrRequiredThe value's name.
classes[].instance_key.descriptionstrRequiredWhere to find it.
classes[].instance_key.requiredboolFalseWhether every document of the class has it.

output

KeyTypeDefaultDescription
output.include_contentboolFalsePut each segment's Markdown in content.
output.materialize_filesboolFalseGive each segment a downloadable file.
split.py
from nace_sdk import NaceClient

with NaceClient() as client:
    job = client.documents.split(
        "https://example.com/packet.pdf",
        classes=[
            {"id": "invoice", "label": "Invoice", "description": "A supplier invoice"},
            {"id": "receipt", "label": "Receipt", "description": "A payment receipt"},
        ],
        wait_seconds=60,
    )
    if job.status != "succeeded":
        job = client.jobs.wait(job.job_id)

for segment in job.result["segments"]:
    print(segment["start_page"], segment["end_page"], segment["class"]["id"] if segment["class"] else None)

Class ids must be unique and can't contain /, and blank_page, unreadable_content and __ndi_unclassified are reserved. See Split.

On this page