Skip to content

Understanding detection results

Behind every anonymized document is a simple list: each piece of PII the model found, and what it should become. Piixie calls each item a mapping (or entry). Understanding this list demystifies the whole app — the editor, the history table, dictionaries, and deanonymization all revolve around it.

The model’s only job is detection and classification. For a sentence like:

El paciente Marcos Patel (NHC 1029384, F. Nac. 14/03/1982) fue atendido
por la Dra. Ruiz. Contacto: [email protected].

it returns a structured result — roughly:

TypeOriginal
NAMEMarcos Patel
ID1029384(NHC)
DOB14/03/1982
NAMEDra. Ruiz
EMAIL[email protected]

The model never rewrites your document. Piixie takes that list and applies the mode you chose — synthetic, redaction, or labels — to produce the replacements. That separation is deliberate: the model is good at finding PII, and a deterministic engine is better at applying changes precisely and consistently.

Each entry carries:

  • Type — the PII category (NAME, EMAIL, ID, …).
  • Original — the exact text found in the document.
  • Replacement — what it becomes (filled in by the mode, or by you in the editor).
  • Generator — how the replacement was produced (a Faker function, a redaction fill, a label, a custom value). This is what the history table reveals when you click a synthetic value.

If a person is mentioned as Marcos Patel, Marcos, Sr. Patel, and Patel, the model emits a separate entry for each. In synthetic and label modes, all of them resolve to the same identity, so the document stays coherent. Longer forms are applied before shorter ones, so replacing Marcos never corrupts Marcos Patel. More on this in why LLMs for PII detection.

  • During a run — a live progress dialog streams detection as it happens (and, with reasoning models, the model’s thinking).
  • After a run — the history entry shows the full replacement table, searchable and exportable.
  • In the editor — the same list, but editable: toggle, fix, add, remove.