Skip to content

ontocast.onto.section_models

Pydantic models for document outlines and section spans.

Attributes

CANONICAL_SECTION_LABELS = canonical_labels(get_default_section_schema()) module-attribute

__all__ = ['CANONICAL_SECTION_LABELS', 'DocumentOutline', 'HeadingNode', 'SectionSpan'] module-attribute

Classes

DocumentOutline

Bases: BasePydanticModel

Ordered headings detected in a document, with the document length.

Source code in ontocast/onto/section_models.py
class DocumentOutline(BasePydanticModel):
    """Ordered headings detected in a document, with the document length."""

    text_len: int
    nodes: list[HeadingNode] = Field(default_factory=list)

Attributes

nodes = Field(default_factory=list) class-attribute instance-attribute
text_len instance-attribute

HeadingNode

Bases: BasePydanticModel

One detected heading in the document outline.

Attributes:

Name Type Description
text str

Raw heading line as it appears in the document text.

normalised str

Heading text after decoration/numbering stripping.

start int

Character offset of the heading line itself.

body_start int

Character offset just past the heading line.

level int

Markdown heading depth (1 = top). Docling reports a flat level for PDF conversions, so this is informational only.

sectionlike bool

Whether the heading reads as a generic section name rather than a descriptive subsection title or a document title.

label str | None

Canonical section label, when resolved.

source SectionLabelSource

How label was decided.

confidence float

Confidence in label in [0, 1].

Source code in ontocast/onto/section_models.py
class HeadingNode(BasePydanticModel):
    """One detected heading in the document outline.

    Attributes:
        text: Raw heading line as it appears in the document text.
        normalised: Heading text after decoration/numbering stripping.
        start: Character offset of the heading line itself.
        body_start: Character offset just past the heading line.
        level: Markdown heading depth (1 = top). Docling reports a flat level
            for PDF conversions, so this is informational only.
        sectionlike: Whether the heading reads as a generic section name rather
            than a descriptive subsection title or a document title.
        label: Canonical section label, when resolved.
        source: How ``label`` was decided.
        confidence: Confidence in ``label`` in ``[0, 1]``.
    """

    text: str
    normalised: str
    start: int
    body_start: int
    level: int = 1
    sectionlike: bool = True
    label: str | None = None
    source: SectionLabelSource = SectionLabelSource.OUTLINE_UNRESOLVED
    confidence: float = 0.0

Attributes

body_start instance-attribute
confidence = 0.0 class-attribute instance-attribute
label = None class-attribute instance-attribute
level = 1 class-attribute instance-attribute
normalised instance-attribute
sectionlike = True class-attribute instance-attribute
source = SectionLabelSource.OUTLINE_UNRESOLVED class-attribute instance-attribute
start instance-attribute
text instance-attribute

SectionSpan

Bases: BasePydanticModel

Character span of a document section with a normalised label.

label is None for a region whose section type is not (yet) known — for example an unrecognised but section-like heading. Such a span is explicitly unresolved rather than absent, which is what stops a neighbouring label from being smeared across it.

Source code in ontocast/onto/section_models.py
class SectionSpan(BasePydanticModel):
    """Character span of a document section with a normalised label.

    ``label`` is ``None`` for a region whose section type is not (yet) known —
    for example an unrecognised but section-like heading. Such a span is
    explicitly unresolved rather than absent, which is what stops a neighbouring
    label from being smeared across it.
    """

    label: str | None = None
    start: int
    end: int
    source: SectionLabelSource = SectionLabelSource.OUTLINE_UNRESOLVED
    confidence: float = 0.0

Attributes

confidence = 0.0 class-attribute instance-attribute
end instance-attribute
label = None class-attribute instance-attribute
source = SectionLabelSource.OUTLINE_UNRESOLVED class-attribute instance-attribute
start instance-attribute

Functions: