Utiliser les détecteurs prêts à l'emploi¶
piighost fournit des ensembles de patterns regex prêts à l'emploi pour les PII les plus courants : emails, IPs, URLs, clés d'API, numéros de téléphone, SSN, IBAN... Vous pouvez les utiliser tels quels, les combiner entre eux ou les étendre avec vos propres patterns.
Cette page en détaille les recettes d'usage. Pour le catalogue complet des labels disponibles (Communs, US, Europe), voir Référence Détecteurs prêts à l'emploi.
Une seule région¶
from examples.detectors.common import create_detector
from piighost.anonymizer import Anonymizer
from piighost.linker.entity import ExactEntityLinker
from piighost.entity_resolver import MergeEntityConflictResolver
from piighost.pipeline import AnonymizationPipeline
from piighost.placeholder import LabelCounterPlaceholderFactory
from piighost.span_resolver import ConfidenceSpanConflictResolver
detector = create_detector()
span_resolver = ConfidenceSpanConflictResolver()
entity_linker = ExactEntityLinker()
entity_resolver = MergeEntityConflictResolver()
anonymizer = Anonymizer(LabelCounterPlaceholderFactory())
pipeline = AnonymizationPipeline(
detector=detector,
span_resolver=span_resolver,
entity_linker=entity_linker,
entity_resolver=entity_resolver,
anonymizer=anonymizer,
)
anonymized, _ = await pipeline.anonymize("Écrivez-moi à alice@example.com, serveur 192.168.1.42.")
print(anonymized)
# Écrivez-moi à <<EMAIL:1>>, serveur <<IP_V4_1>>.
Combiner commun + régional¶
from examples.detectors.europe import create_full_detector
detector = create_full_detector()
# create_full_detector() fusionne les patterns communs + européens via CompositeDetector
span_resolver = ConfidenceSpanConflictResolver()
entity_linker = ExactEntityLinker()
entity_resolver = MergeEntityConflictResolver()
anonymizer = Anonymizer(LabelCounterPlaceholderFactory())
pipeline = AnonymizationPipeline(
detector=detector,
span_resolver=span_resolver,
entity_linker=entity_linker,
entity_resolver=entity_resolver,
anonymizer=anonymizer,
)
anonymized, _ = await pipeline.anonymize(
"IBAN FR7630006000011234567890189, email marie@exemple.fr, tel 06 12 34 56 78."
)
print(anonymized)
# IBAN <<EU_IBAN:1>>, email <<EMAIL:1>>, tel <<FR_PHONE:1>>.
Sélectionner des patterns à la carte¶
from piighost.detector import RegexDetector
from examples.detectors.common import PATTERNS as COMMON
from examples.detectors.europe import PATTERNS as EU
# Choisissez uniquement ce dont vous avez besoin
my_patterns = {
"EMAIL": COMMON["EMAIL"],
"URL": COMMON["URL"],
"EU_IBAN": EU["EU_IBAN"],
"FR_PHONE": EU["FR_PHONE"],
}
detector = RegexDetector(patterns=my_patterns)
Combiner avec un NER (NER + regex)¶
from gliner2 import GLiNER2
from piighost.detector import Gliner2Detector, CompositeDetector
from examples.detectors.common import create_detector as create_regex
model = GLiNER2.from_pretrained("fastino/gliner2-multi-v1")
ner_detector = Gliner2Detector(model=model, labels=["PERSON", "LOCATION"], threshold=0.5)
regex_detector = create_regex() # emails, IPs, URLs, clés API, etc.
detector = CompositeDetector(detectors=[ner_detector, regex_detector])
span_resolver = ConfidenceSpanConflictResolver()
entity_linker = ExactEntityLinker()
entity_resolver = MergeEntityConflictResolver()
anonymizer = Anonymizer(LabelCounterPlaceholderFactory())
pipeline = AnonymizationPipeline(
detector=detector,
span_resolver=span_resolver,
entity_linker=entity_linker,
entity_resolver=entity_resolver,
anonymizer=anonymizer,
)
anonymized, _ = await pipeline.anonymize("Patrick à alice@example.com, IP 10.0.0.1.")
print(anonymized)
# <<PERSON:1>> à <<EMAIL:1>>, IP <<IP_V4_1>>.
Ajouter vos propres patterns¶
Les ensembles de patterns sont de simples dictionnaires, étendez-les ou créez les vôtres :
from examples.detectors.common import PATTERNS as COMMON
my_patterns = {
**COMMON,
"LICENSE_PLATE_FR": r"\b[A-Z]{2}-\d{3}-[A-Z]{2}\b",
"CUSTOM_ID": r"\bCUST-\d{6}\b",
}
Voir aussi Étendre PIIGhost pour créer des classes de détecteur entièrement personnalisées.