spaCy integration
spaCy is optional. spokenform uses it only to obtain source-aligned lexical annotations for POS-aware abbreviation rules.
Current effect with the released abbr2words structured API
abbr2words accepts POS annotations, but its bundled language registries do not
necessarily require POS labels. A trained model may therefore produce the same
default output as the non-spaCy path. The integration is useful for custom entries
with POS guards. Structured German quantity recognition remains source-aligned
through the same released abbr2words API; spaCy does not perform language
detection or replace the explicit adapter contract.
Load an installed model by name
from spokenform import prepare
result = prepare(
"The board is 2 in. wide.",
language="en",
spacy_model="en_core_web_sm",
strict=True,
)
The model name or path is passed to spacy.load(). Models are never downloaded
automatically.
Inject an application-owned pipeline
import spacy
from spokenform import prepare
nlp = spacy.load("de_core_news_sm")
result = prepare(
"Prof. Klein liefert 2 kg.",
language="de",
nlp=nlp,
)
Injection is preferred in services that already manage model lifecycle, device selection, disabled components, and process-level caching.
Supply annotations directly
from spokenform import TokenAnnotation, prepare
annotations = (
TokenAnnotation(start=0, end=2, text="in", pos="ADP", tag="IN"),
)
result = prepare("in.", language="en", annotations=annotations)
Explicit annotations take precedence over nlp and spacy_model.
Required token contract
A spaCy-compatible pipeline must return iterable tokens exposing:
text;idx, the character offset in the original text;optional
pos_,tag_,lemma_, andlang_strings.
lang_ is retained as metadata only; spokenform does not perform token-level language detection.
A blank tokenizer such as spacy.blank("en") provides token boundaries but no
statistical POS tags. Use a trained pipeline containing an appropriate tagging or
morphological component when POS-aware rules are required. Annotations are remapped around protected spans so their offsets remain aligned with the internal text sent to abbr2words.
Error behavior
With strict=False, a requested but unavailable model produces a warning in
PreparedText.warnings and normalization continues without spaCy. With
strict=True, SpacyModelError is raised.