Aller au contenu

Premier pipeline

L'usage le plus simple : créer un AnonymizationPipeline et l'appeler directement sur du texte.

import asyncio

from gliner2 import GLiNER2

from piighost.anonymizer import Anonymizer
from piighost.detector import Gliner2Detector
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

# 1. Charger le modèle NER
model = GLiNER2.from_pretrained("fastino/gliner2-multi-v1")

# 2. Instancier chaque composant
detector = Gliner2Detector(model=model, labels=["PERSON", "LOCATION"], threshold=0.5)
span_resolver = ConfidenceSpanConflictResolver()
entity_linker = ExactEntityLinker()
entity_resolver = MergeEntityConflictResolver()
anonymizer = Anonymizer(LabelCounterPlaceholderFactory())

# 3. Assembler le pipeline
pipeline = AnonymizationPipeline(
    detector=detector,
    span_resolver=span_resolver,
    entity_linker=entity_linker,
    entity_resolver=entity_resolver,
    anonymizer=anonymizer,
)


async def main():
    # 4. Anonymiser
    anonymized, entities = await pipeline.anonymize(
        "Patrick habite à Paris. Patrick aime Paris.",
    )
    print(anonymized)
    # <<PERSON:1>> habite à <<LOCATION:1>>. <<PERSON:1>> aime <<LOCATION:1>>.

    # 5. Désanonymiser
    original, _ = await pipeline.deanonymize(anonymized)
    print(original)
    # Patrick habite à Paris. Patrick aime Paris.


asyncio.run(main())

Labels disponibles

Les labels supportés dépendent du modèle NER utilisé. Les labels courants incluent "PERSON", "LOCATION", "ORGANIZATION", "EMAIL", "PHONE".

Pour enchaîner plusieurs messages dans une conversation avec mémoire partagée, voir Pipeline conversationnel.