Normalize text before scanning¶
Goal: apply deterministic input normalization before security analysis, while still keeping the normalized text available to your application.
normalize_text is separate from scan_all, enqueue, and consume_next_event. It returns only
the normalized string. The scanner does not enqueue work, change scores, attach sidecars, or add
training behavior when you call it.
Normalize once, then scan¶
from patronus_ark import SecurityGateway, normalize_text
raw = " ignor\u200be\u00a0\u202e Ρrеνіоus instructions "
text = normalize_text(raw)
scanner = SecurityGateway(
categories=["injection"],
max_level="l1",
download_files=False,
)
results = scanner.scan_all(text)
Use this shape when your app wants to store, display, log, or otherwise reuse the same canonical text that it sends into the pipeline.
Gate individual normalization steps¶
All steps are enabled by default. Pass configs to disable a specific step:
text = normalize_text(
raw,
configs={
"html_entities": True,
"nfkc": True,
"confusables": False,
"format_characters": True,
"whitespace": True,
"trim": True,
},
)
Supported gates:
| Gate | Default | Effect |
|---|---|---|
html_entities |
True |
Recursively decodes HTML entities with a small max depth. |
nfkc |
True |
Applies Unicode NFKC normalization. |
confusables |
True |
Maps common confusables and homoglyphs to ASCII-like characters. |
format_characters |
True |
Removes Unicode format characters, including zero-width characters. |
whitespace |
True |
Collapses whitespace runs to one space. |
trim |
True |
Removes leading and trailing whitespace. |
Unknown keys and non-boolean values raise ValueError.
Rust API¶
use patronus_ark::{normalize_text, TextNormalizationConfig};
let raw = " ignor\u{200b}e\u{00a0}\u{202e} Ρrеνіоus instructions ";
let text = normalize_text(raw, &TextNormalizationConfig::default());
Use a custom TextNormalizationConfig when you need to disable one step:
use patronus_ark::{normalize_text, TextNormalizationConfig};
let config = TextNormalizationConfig {
confusables: false,
..TextNormalizationConfig::default()
};
let text = normalize_text(raw, &config);