Reference Anonymizer¶
Module : piighost.anonymizer
Anonymizer¶
Effectue le remplacement de texte par spans en utilisant une placeholder factory. Classe stateless aucun etat interne entre les appels.
Constructeur¶
| Parametre | Type | Description |
|---|---|---|
ph_factory |
AnyPlaceholderFactory |
Factory de placeholders pour la generation de tokens (requis) |
Methodes¶
anonymize(text, entities) -> str¶
Remplace chaque detection dans text par le token de son entite. Les remplacements sont appliques de droite a gauche.
from piighost.anonymizer import Anonymizer
from piighost.placeholder import LabelCounterPlaceholderFactory
from piighost.models import Detection, Entity, Span
anonymizer = Anonymizer(LabelCounterPlaceholderFactory())
entity = Entity(detections=(
Detection(text="Patrick", label="PERSON", position=Span(0, 7), confidence=0.9),
))
result = anonymizer.anonymize("Patrick est gentil", [entity])
# '<<PERSON:1>> est gentil'
deanonymize(anonymized_text, entities) -> str¶
Restaure le texte original en remplacant les tokens par les textes de detection originaux.
Detecteurs¶
Module : piighost.detector
AnyDetector (Protocole)¶
Interface pour tous les detecteurs d'entites. Tous les detecteurs sont async.
GlinerDetector¶
Implementation utilisant le modele GLiNER2.
| Parametre | Type | Defaut | Description |
|---|---|---|---|
model |
GLiNER2 |
Instance du modele GLiNER2 (requis) | |
labels |
list[str] |
Types d'entites a detecter (requis) | |
threshold |
float |
0.5 |
Score de confiance minimum (0.0–1.0) |
flat_ner |
bool |
True |
Mode NER sans entites imbriquees |
ExactMatchDetector¶
Detection par correspondance exacte de mots avec regex word-boundary. Utile pour les tests.
RegexDetector¶
Detection par patterns regex, un pattern par label.
CompositeDetector¶
Chaine plusieurs detecteurs et fusionne leurs resultats.
Placeholder Factories¶
Module : piighost.placeholder
AnyPlaceholderFactory (Protocole)¶
class AnyPlaceholderFactory(Protocol):
def create(self, entities: list[Entity]) -> dict[Entity, str]: ...
LabelCounterPlaceholderFactory¶
Tags sequentiels <<LABEL:N>>.
factory = LabelCounterPlaceholderFactory()
tokens = factory.create([person, location])
# {person: '<<PERSON:1>>', location: '<<LOCATION:1>>'}
LabelHashPlaceholderFactory¶
Tags opaques deterministes bases sur SHA-256.
factory = LabelHashPlaceholderFactory(hash_length=8)
tokens = factory.create([person])
# {person: '<<PERSON:a1b2c3d4>>'}
LabelPlaceholderFactory¶
Toutes les entites du meme label partagent le meme token <<LABEL>>.
factory = LabelPlaceholderFactory()
tokens = factory.create([person, location])
# {person: '<<PERSON>>', location: '<<LOCATION>>'}
Modeles de donnees¶
Module : piighost.models
Detection¶
Resultat de detection NER.
@dataclass(frozen=True)
class Detection:
text: str # Forme de surface : "Patrick"
label: str # Type d'entite : "PERSON"
position: Span # Position dans le texte
confidence: float # Score (0.0–1.0)
Entity¶
Groupe de detections referant au meme PII.
@dataclass(frozen=True)
class Entity:
detections: tuple[Detection, ...]
# label: str (propriete, depuis la premiere detection)
Span¶
Position dans le texte source.
@dataclass(frozen=True)
class Span:
start_pos: int # Index de debut (inclus)
end_pos: int # Index de fin (exclus)
# overlaps(other: Span) -> bool
Exceptions¶
Module : piighost.exceptions
CacheMissError¶
Levee quand une recherche en cache ne trouve pas d'entree. Utilisee par le middleware pour basculer de pipeline.deanonymize() vers pipeline.deanonymize_with_ent().