Presidio 2.2.364 testé pour de vrai : installation, détections sur texte anglais et français (2026-10-18)
Test exécuté le 18 octobre 2026 (page rédigée le 18 octobre 2026).
Test d'usage réel mais limité : une machine, un jeu de test synthétique, aucune note ni classement. Les résultats ne se généralisent pas à d'autres données. Notre méthode.
En résumé
Le 2026-10-18, nous avons installé Presidio 2.2.364 dans un environnement Python isolé et vide, puis fait passer deux courts textes inventés (un en anglais, un en français) dans l'analyseur et l'anonymiseur. Ce test porte sur une seule machine, une seule version, un petit modèle de langue anglais et deux textes de quelques lignes : il décrit ce que nous avons observé, il ne mesure ni rappel ni précision et ne se généralise pas à vos documents. Il complète l'avis MagicMate sur Presidio, qui reste une lecture des sources publiques.
Ce que nous avons observé :
- L'installation par
pippuis le téléchargement du modèle ont fonctionné du premier coup. L'environnement obtenu pèse 326 Mo. - Sur le texte anglais, les e-mail, carte bancaire, IBAN, adresse IP, personne et lieu ont été détectés. Le téléphone américain l'a été avec un score faible, et plusieurs détections parasites sont apparues (voir plus bas).
- Sur le texte français passé au moteur anglais, le nom, l'e-mail, le téléphone, l'IBAN français et la ville ont été détectés. Le numéro SIREN et le numéro de sécurité sociale (NIR) ne l'ont pas été, ce que l'avis annonçait. Plusieurs mots ordinaires ont en revanche été classés à tort comme organisation.
Protocole et commandes
Machine : Windows 11 (10.0.26200), Python 3.13.13, shell Git Bash. Tout s'est fait dans un dossier neuf, hors du projet, avec un environnement virtuel dédié ; le script de test est resté dans un autre dossier et a été lancé avec python -I.
- Environnement :
python -m venv venv. - Paquets :
venv/Scripts/python.exe -m pip install presidio-analyzer presidio-anonymizer, depuis le registre officiel PyPI. Versions installées : presidio-analyzer 2.2.364, presidio-anonymizer 2.2.364, spaCy 3.8.16, pydantic 2.14.1, numpy 2.4.6. - Modèle :
python -m spacy download en_core_web_sm, qui a installé en_core_web_sm 3.8.0 (15 Mo sur disque). Nous n'avons pas vérifié l'empreinte de ce modèle : il vient du téléchargement automatique de spaCy. - Moteur : le moteur par défaut de Presidio s'appuie sur le grand modèle anglais, que nous n'avons pas installé. Nous avons donc configuré
NlpEngineProvideravec le modèleen_core_web_smetsupported_languages=["en"]. - Appels :
AnalyzerEngine.analyze(text=..., language="en"), puisAnonymizerEngine.anonymize(...)avec l'opérateur par défaut (remplacement par le nom de l'entité), puis avec l'opérateurmask(6 premiers caractères remplacés par*). - Durées mesurées avec
time.perf_counter()dans le script.
Jeu de test : deux textes inventés, sans donnée réelle. Le texte anglais contient un nom, un e-mail, un téléphone américain, une carte de test à 16 chiffres, un IBAN britannique d'exemple, une adresse IP privée, une URL et une ville. Le texte français contient un nom, un téléphone, un e-mail, un IBAN français d'exemple, un numéro SIREN à 9 chiffres (valide au contrôle de Luhn, que nous avons vérifié nous-mêmes), un numéro de sécurité sociale de forme plausible et une ville.
Résultats mesurés
Durées (une machine, un seul essai chacune) :
| Étape | Durée |
|---|---|
| Import des modules Presidio | 1,54 s |
| Création du moteur avec le petit modèle | 0,57 s |
Premier appel analyze, texte anglais | 0,55 s |
| Appels suivants (texte anglais, puis français) | 11 à 17 ms |
Entités gérées par l'analyseur avec cette configuration en anglais (liste lue dans le programme) : 23 types, dont EMAIL_ADDRESS, PHONE_NUMBER, CREDIT_CARD, IBAN_CODE, IP_ADDRESS, URL, PERSON, LOCATION, US_SSN, UK_NHS. Aucun type français n'y figure.
Texte anglais, détections correctes : John Smith (PERSON), john.smith@example.com (EMAIL_ADDRESS), 4111 1111 1111 1111 (CREDIT_CARD), GB82WEST12345698765432 (IBAN_CODE), 192.168.1.10 (IP_ADDRESS), London (LOCATION), l'URL complète (URL). Le téléphone +1 212-555-0198 a été détecté avec un score de 0,4, le plus bas de la série.
Texte anglais, détections parasites : l'adresse e-mail a aussi été étiquetée ORGANIZATION et en partie URL (john.sm, example.com) ; 1111 1111 (morceau de la carte) et l'adresse IP ont aussi été étiquetées DATE_TIME. Avec l'opérateur par défaut, la sortie remplace l'adresse IP par <DATE_TIME> au lieu de <IP_ADDRESS> : la valeur est bien masquée, mais sous la mauvaise étiquette.
Texte français passé au moteur anglais :
- détectés :
Marie Dupont(PERSON),marie.dupont@example.fr(EMAIL_ADDRESS),01 23 45 67 89(PHONE_NUMBER, score 0,4),FR7630006000011234567890189(IBAN_CODE),Paris(LOCATION) ; - non détectés : le SIREN
732 829 320est resté en clair dans le texte anonymisé ; le numéro de sécurité sociale est resté en clair, à l'exception de75pris pour une date (DATE_TIME) ; - détections erronées :
Veuillez,IBAN,ElleetNuméro de sécuritéont été étiquetés ORGANIZATION ; des fragments du numéro de téléphone (01 23,45 67 89) ont été étiquetés DATE_TIME en plus de la détection du téléphone.
Anonymisation : l'opérateur par défaut remplace chaque zone par <TYPE>. L'opérateur mask avec 6 caractères remplacés ne cache que le début de chaque zone : l'adresse e-mail reste lisible après les six premiers caractères. Le texte anonymisé en français contenait encore le SIREN et le numéro de sécurité sociale.
Ce qui n'est pas établi
Nous n'avons pas cherché pourquoi le téléphone sort avec un score de 0,4, ni si le grand modèle anglais (celui par défaut) donnerait moins de détections parasites que le petit : la comparaison n'a pas été faite. Les détections parasites ne peuvent donc pas être attribuées au petit modèle à partir de ce test.
Limites du test
- Une seule machine (Windows 11), une seule version (2.2.364), Python 3.13.13.
- Deux textes de quelques lignes, inventés : aucune mesure de rappel ni de précision, aucune généralisation possible.
- Petit modèle anglais uniquement, en configuration manuelle : le comportement avec le modèle par défaut n'est pas mesuré.
- Les durées sont des mesures isolées sur de très petits textes, pas des performances sur des documents réels.
- L'empreinte du modèle spaCy n'a pas été vérifiée.
- Les données sont inventées : nous ne savons pas comment l'outil se comporte sur des documents réels.
Ce que nous n'avons pas testé
- Un modèle de langue français et l'ajout de reconnaisseurs maison pour le SIREN, le SIRET ou le numéro de sécurité sociale.
- Le grand modèle anglais, les moteurs transformers et stanza.
- Des documents longs, des volumes importants, la consommation de mémoire.
- Le service REST via Docker, le module d'image avec Tesseract, les données structurées.
- La liste complète des opérateurs (chiffrement, hachage) et la réversibilité de l'anonymisation.
- D'autres systèmes d'exploitation et d'autres versions.
- Une comparaison avec d'autres outils.
Sources
- Notre test du 2026-10-18, décrit ci-dessus (presidio-analyzer et presidio-anonymizer 2.2.364, installés depuis PyPI).
- https://github.com/microsoft/presidio
- Avis MagicMate sur Presidio pour la lecture des sources publiques.
Aller plus loin
- Avis MagicMate sur l'outil
- Fiche produit Presidio dans le catalogue MARKETIA
- Comparatif : Détecter les secrets dans le code : Gitleaks, Betterleaks, Trivy et Presidio, ce que disent les sources
- Demander une installation sur devis (installation de Presidio chez vous, réponse sous 5 jours ouvrés, sans engagement)
- Tous les tests réels
- Dépôt du projet : https://github.com/microsoft/presidio