From ac5c35ae2de3fef218f832659a9f949b53c87252 Mon Sep 17 00:00:00 2001 From: Domi31tls Date: Tue, 31 Mar 2026 07:45:42 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20externalisation=20des=20listes=20?= =?UTF-8?q?=E2=80=94=20stop-words=20et=20villes=20modifiables=20sans=20cod?= =?UTF-8?q?e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Toutes les listes de règles sont maintenant modifiables sans toucher au code Python : Fichiers de données (data/) : - stopwords_manuels.txt : 1307 termes médicaux/techniques - villes_blacklist.txt : 117 communes à ne pas matcher - medicaments_stopwords.txt : 7312 médicaments BDPM (existant) - Chargés automatiquement au démarrage Config YAML (dictionnaires.yml) : - additional_stopwords : mots supplémentaires par établissement - additional_villes_blacklist : villes supplémentaires - whitelist_phrases : phrases à ne jamais anonymiser - force_mask_terms : mots à toujours masquer Chaîne de chargement : code dur → fichiers data/ → YAML config Les 3 niveaux se cumulent (union). Co-Authored-By: Claude Opus 4.6 (1M context) --- anonymizer_core_refactored_onnx.py | 35 + config/dictionnaires.yml | 12 + data/stopwords_manuels.txt | 1311 ++++++++++++++++++++++++++++ data/villes_blacklist.txt | 121 +++ 4 files changed, 1479 insertions(+) create mode 100644 data/stopwords_manuels.txt create mode 100644 data/villes_blacklist.txt diff --git a/anonymizer_core_refactored_onnx.py b/anonymizer_core_refactored_onnx.py index f5b8003..dbd8210 100644 --- a/anonymizer_core_refactored_onnx.py +++ b/anonymizer_core_refactored_onnx.py @@ -204,6 +204,14 @@ _VILLE_BLACKLIST = { # Parties du corps homonymes de communes (FP "prurit invalidant (COU, décolleté)") "COU", "DOS", "SEIN", "BRAS", } +# Enrichissement depuis fichier externe (modifiable sans toucher au code) +_villes_bl_file = Path(__file__).parent / "data" / "villes_blacklist.txt" +if _villes_bl_file.exists(): + for _line in _villes_bl_file.read_text(encoding="utf-8").splitlines(): + _w = _line.strip() + if _w and not _w.startswith("#"): + _VILLE_BLACKLIST.add(_w) + log.info("Villes blacklist chargées : %d entrées", len(_VILLE_BLACKLIST)) try: import ahocorasick as _ahocorasick @@ -772,6 +780,17 @@ _MEDICAL_STOP_WORDS_SET = { # Enrichissement automatique avec les ~4000 noms de médicaments d'edsnlp _MEDICAL_STOP_WORDS_SET.update(_load_edsnlp_drug_names()) +# Enrichissement depuis fichier externe (modifiable sans toucher au code) +_stopwords_file = Path(__file__).parent / "data" / "stopwords_manuels.txt" +if _stopwords_file.exists(): + _sw_count = 0 + for _line in _stopwords_file.read_text(encoding="utf-8").splitlines(): + _w = _line.strip() + if _w and not _w.startswith("#"): + _MEDICAL_STOP_WORDS_SET.add(_w) + _sw_count += 1 + log.info("Stop-words manuels chargés : %d mots depuis %s", _sw_count, _stopwords_file.name) + # Enrichissement BDPM : ~7300 noms commerciaux + DCI/substances actives _bdpm_path = Path(__file__).parent / "data" / "bdpm" / "medicaments_stopwords.txt" if _bdpm_path.exists(): @@ -1053,6 +1072,22 @@ def load_dictionaries(config_path: Optional[Path]) -> Dict[str, Any]: cfg[k] = v except Exception: pass + + # Charger les stop-words et villes supplémentaires depuis le YAML + extra_sw = cfg.get("additional_stopwords", []) + if extra_sw: + for w in extra_sw: + if w and str(w).strip(): + _MEDICAL_STOP_WORDS_SET.add(str(w).strip().lower()) + log.info("Stop-words YAML supplémentaires : %d", len(extra_sw)) + + extra_villes = cfg.get("additional_villes_blacklist", []) + if extra_villes: + for v in extra_villes: + if v and str(v).strip(): + _VILLE_BLACKLIST.add(str(v).strip().upper()) + log.info("Villes blacklist YAML supplémentaires : %d", len(extra_villes)) + return cfg # ----------------- Extraction ----------------- diff --git a/config/dictionnaires.yml b/config/dictionnaires.yml index b489a0f..05f1526 100644 --- a/config/dictionnaires.yml +++ b/config/dictionnaires.yml @@ -60,6 +60,18 @@ whitelist_phrases: - "date de sortie" - "date d'admission" - "code postal" +# Mots supplémentaires à ne jamais masquer comme noms de personnes +# (complète les 9000+ stop-words intégrés) +additional_stopwords: [] +# Exemple : +# - "votre_mot" + +# Villes supplémentaires à ne jamais matcher comme lieux +# (complète les 115+ villes blacklistées intégrées) +additional_villes_blacklist: [] +# Exemple : +# - "VOTRE_VILLE" + flags: case_insensitive: true unicode_word_boundaries: true diff --git a/data/stopwords_manuels.txt b/data/stopwords_manuels.txt new file mode 100644 index 0000000..055890f --- /dev/null +++ b/data/stopwords_manuels.txt @@ -0,0 +1,1311 @@ +# Stop-words manuels (termes médicaux, soins infirmiers, dispositifs, etc.) +# Un mot par ligne. Lignes vides et commentaires # ignorés. +# Total : 1473 entrées + +100mg +10mg +20mg +300ui +40mg +500ml +HH:MM NOM +OXYGENE LUNETTES +abasaglar +abdomen +abdominal +abdominale +abdomino +abdomino-pelvien +ablation +absence +absent +absente +acc +accompagner +accord +accueil +acetylsalicylique +acf +acide +act +actiskenan +acupan +acétylsalicylique +addictologie +admin +administration +admission +ado +adrenaline +adulte +aeg +aerosol +agt +ahl +aide +aiguilles +ains +ait +alat +alcoologie +aldactone +alde +alerte +alertes +alfa +algie +alim +alimentaire +alimentation +allergie +allergies +allergologie +almus +alprazolam +alter +ambulatoire +amelioration +amitriptyline +amlodipine +amox +amoxicilline +amp +ampoule +amélioration +analyse +anatomo-pathologique +ancien +ancienne +anemie +anesthésie +anesthésiste +angio +angio-irm +angioscanner +angle +anglet +angoisse +anionique +antalgique +antecedents +antiseptique +antécédent +antécédents +anémie +aortique +apidra +apixaban +appendicectomie +après +apyretique +apyrexie +apyrétique +apyréxie +arg +aripiprazole +arrete +arrow +arrêt +arrêté +arw +asat +aspirine +ass +assistant +assistante +associée +atarax +atcd +atg +atorvastatine +augmentation +augmentin +aussi +autonome +autonomes +autre +autres +aux +avaler +avant +avc +avec +avenue +aviation +avis +axa +azithromycine +bactrim +balance +bandelette +bandelettes +barreau +bas +basque +basques +bassin +bax +bayonne +bbm +bcy +bdc +beclometasone +betadine +betascrub +bga +bgn +bgr +bha +bhc +bi-profenid +biarritz +bic +bien +bijoux +bilan +bili +biliaire +biliaires +bilirubine +bille +bio +biochimie +biogaran +biologie +bionolyte +biopsie +biprofenid +biseptine +bisoprolol +blader +bloc +bnp +boisson +bon +bonne +bordeaux +bouche +bouchon +bouffee +bouffée +bouteille +bpco +bracelet +brilique +brintellix +bromazepam +bronchite +budesonide +bureau +burkitt +buspirone +buv +buvable +buvables +cabinet +cadre +calcidose +calcémie +cambo +cancerologie +cancérologie +candesartan +canule +canules +capillaire +capsule +capsules +capteur +car +cardiaque +cardio +cardiologie +cardiologue +cart +cas +cases +cat +categorie +catégorie +cci +ceftriaxone +celecoxib +centre +cerebral +cerebrale +ces +cet +cetirizine +cetonurie +cette +cfx +changement +changes +chef +cher +chers +chez +chimio +chirurgie +chl +chlorhexidine +chlorure +cholangiographie +cholecystectomie +cholecystite +cholécystectomie +cholécystite +ciprofloxacine +circuit +citalopram +claforan +clarithromycine +clav +clavulanique +clindamycine +clinique +cliniquement +clonazepam +clopidogrel +coaprovel +cod +code +cognitif +colchicine +collation +colle +comme +commentaire +commentaires +complet +complete +complète +compresse +comprime +comprimé +compétences +concha +conclusion +concubin +confortable +confrere +confrère +confrères +consoeur +constantes +consultation +contention +contexte +continu +continue +contractuel +contractuelle +conventionnel +conventionnelle +coordonnateur +coordonnatrice +cortancyl +corticothérapie +corticoïdes +cortisone +cotrimoxazole +couchage +coucher +coumadine +courrier +court +covid +cpk +cpr +crestor +cristers +crop +crp +crt +ctc +cure +cutanee +cutané +cutanée +cyamemazine +cyto +cérébral +cérébrale +cétonurie +côte +dabigatran +dafalgan +dans +dapagliflozine +date +dax +dci +demain +demande +densité +depakote +depilation +depuis +dermatologie +dernière +des +desc +deshabillage +desinfection +dessert +destination +devenir +diabetique +diabétique +diagnostic +diagnostique +diagnostiques +diarrhees +diarrhées +diastolique +diazepam +diclofenac +diet +diffusé +digestif +digestive +digestives +discontinue +discussion +disp +dispositif +distant +diu +diurese +diurèse +diététicienne +docteur +doliprane +domaine +donc +dosage +dose +dossier +dossiers +doubles +douche +douleur +douleurs +douloureuse +douloureux +doxycycline +drain +droit +droite +dulaglutide +duloxetine +durogesic +dynamique +dysimmunitaire +dyslipidémie +début +débuté +dépilation +déshabillage +désinfection +ecbu +ecg +echelle +ecoflac +education +efferalgan +eg +egt +elim +eliminatin +elimination +eliquis +elle +emog +empagliflozine +enalapril +encore +endoc +endocrine +endocrinologie +endocrinologue +endoplasmique +endoscopie +endoscopique +enoxaparine +entero +entre +entree +entresto +entretien +entrée +entéro +environnement +eplerenone +epo +epoux +epp +ergotherapie +ergothérapie +escarre +escitalopram +esomeprazole +espace +est +etat +etp +ett +etxe +eupantol +eupneique +eupnéique +evaluation +evendol +evolugen +evolution +evs +exacyl +examen +examens +exilar +experf +expiration +explications +explorations +externe +ezetimibe +face +faible +fait +fauteuil +fax +febrile +fenid +fentanyl +fer +ferinject +fermeture +feuillet +fevg +fibroscopie +fils +fin +fines +fixateur +flacon +flestouch +flexpen +fluindione +fluoxetine +fluticasone +fluvastatine +fois +folique +fonct +forlax +fort +forte +forxiga +framboise +france +franche +frequence +fresubin +fret +frère +fréquence +furane +furanes +furosemide +fébrile +gabapentine +gamma +gastrique +gastro +gastro-entérologie +gastro-entérologue +gastroenterologue +gastroentérologue +gauche +gaviscon +gds +gel +gelule +gentamicine +geriatrie +germes +ggt +glace +gliclazide +glimepiride +glyc +glycemie +glycemique +glycemiques +glycosurie +glycémie +gouttes +grancher +grand +gsc +gynécologie +gélule +gériatre +gériatrie +gérontologue +habillage +habituelle +habituelles +habitus +had +haitz +haloperidol +hanche +haute +hb +hba +hba1c +hdj +hds +hemato +hematologie +hemodialyse +hemodynamique +hemorragique +hendaye +heparine +hepatique +heure +hgt +hibiscrub +histoire +histologique +horizon +hospitalier +hospitaliers +hospitalisation +hospitalière +hta +hui +humalog +hyaluronique +hydratation +hydrochlorothiazide +hydroxyzine +hyperthermie +hypota +hypotension +hémato +hématologie +hématologue +hémodynamique +hépatique +hépato-gastro-entérologue +hépatologue +hôpital +hôpitaux +iao +ibuprofene +ide +identifiant +identification +iec +imc +img +imipenem +immunologie +imovane +indication +inexium +infectieuse +infectieuses +infectieux +infectiologie +infirmier +infirmière +inflammatoires +inférieurs +inh +inhal +inhalee +inhales +inhalée +inhalés +inj +injectable +innohep +inr +installation +installer +insuline +international +internationale +interne +intervention +intraveineuse +intraveineux +introduction +ionogramme +ipp +ipratropium +ira +irbesartan +irc +irm +isolement +isosource +item +ivg +ivo +januvia +jardiance +jeun +jour +jours +kardegic +ketoprofene +kinesitherapie +kinésithérapie +kwikpen +lancettes +lansoprazole +lansoyl +laroxyl +lasilix +lavabo +lavement +lercanidipine +les +lever +levofloxacine +levothyrox +levothyroxine +lieu +lille +lipruzet +liraglutide +lisinopril +liste +lit +lithiasique +lombaire +lorazepam +losartan +lotissement +lovenox +loxapine +loxen +lunettes +lyoc +lyon +lyrica +légère +maco +macroscopie +madame +mais +maison +maladies +manger +maquillage +marcher +marseille +masque +masse +matelas +maternité +matin +mcg +mdrd +mecillinam +med +medecine +medisol +melatonine +membres +meropenem +message +metformine +methotrexate +methylprednisolone +metronidazole +mettre +micro +microg +microgrammes +microlax +miction +midazolam +midi +minuit +mirtazapine +mise +mobile +mobilisation +mode +moins +mois +molles +mon +monsieur +montelukast +montpellier +mopral +morphine +motif +mso +mtx +mucite +murent +musculaire +musculaires +myl +mylan +myocardite +myosite +myp +médecin +médecine +médical +médullaire +nalbuphine +nalidixique +nantes +naproxene +naso-gastrique +nebivolol +nefopam +negative +neoplasie +nephro +nephrologie +neuf +neuro +neuro-chirurgie +neurologie +neurontin +nfs +nit +nom +nombreuses +nombreux +nominal +nominaux +non +normacol +normal +normale +normaux +normocarde +normotendue +nos +note +notes +nouveau +nouvelle +novasource +novorapid +nt-probnp +nubain +nuit +nutrison +nutritive +négative +néoplasie +néphro +néphrologie +néphrologue +oap +objectif +objectifs +observation +observations +obésité +ofloxacine +olanzapine +olmesartan +oloron +omeprazole +omi +onco +oncologie +oncologue +ondansetron +ongles +operatoire +ophtalmo +ophtalmologie +opocalcium +opératoire +oral +orale +original +orl +orod +orodisp +orthez +ortho +orthopedie +orthopédie +osseuse +oui +ovarienne +oxazepam +oxycodone +oxygène +oxynorm +oxynormoro +ozempic +pages +palais +palliatif +palliatifs +palliative +pan +pancreatite +pancréatite +pansement +pantoprazole +par +paracetamol +paracétamol +paris +paroxetine +partiel +partielle +pas +patch +pathologie +patient +patiente +pau +pca +pcr +pdr +pds +pediatrie +pegic +pelvien +pelvienne +perf +perindopril +perlant +personne +pertes +pessac +peu +phosphatase +phosphatases +piperacilline +pièce +place +plaie +plaie-colle +planification +planifiee +planifié +plaquette +plaquettes +plavix +plq +plus +plusieurs +pneumologie +pneumologue +pnn +po1 +po2 +po3 +poc +poche +polyclinique +polyionique +polyvalent +polyvalente +pompe +ponction +pose +position +posologie +post +post-op +poste +postop +potassium +pouls +pour +poursuite +pradaxa +prandial +praticien +praticienne +praticiens +pravastatine +prednisone +pregabaline +premier +preop +preparations +preremplie +prescription +prescriptions +prescrit +prescrite +pressurise +pressuriser +prevenir +prevention +previscan +principal +principale +principaux +pro-bnp +probnp +proctologue +profenid +professeur +profil +prolongé +prolongée +propranolol +prothese +protheses +prothèse +prothèses +provisoire +pré-op +pré-remplie +préparations +présent +présente +prévenir +prévention +pse +psy +puis +pulmo +pyélo +pédiatrie +pôle +qualimed +quartier +que +quelque +quelques +quetiapine +qui +qvl +rachis +radio +radiologie +ramipril +ranbaxy +rappel +rares +ras +ratiopharm +realisee +reanimation +rectale +refection +regime +regression +relais +relation +relecture +releve +relevé +remontée +ren +renal +renale +repas +reprise +resorbable +resorbables +respi +respimat +respiratoire +responsable +resultat +resultats +retour +retraite +retraitee +retraité +retraitée +rhumatologie +risperidone +risque +rivaroxaban +rnb +rosuvastatine +route +rpps +rue +réalisation +réalisé +réalisée +réanimation +récidivante +récidive +réfection +régime +régression +rénal +rénale +rés +réserve +résistant +résorbable +résorbables +résultat +résultats +réévaluation +sach +sachet +saint +saint-palais +salbutamol +salmeterol +sandoz +sang +sanguine +sans +sante +santé +saos +saturation +scan +scanner +sciatique +scintigraphie +scope +sdz +secrétariat +selle +selles +selon +semaglutide +semaine +semaines +sensible +sensibles +ser +seresta +seretide +seringue +sertraline +service +ses +sfu +sib +signe +signes +signé +simvastatine +sitagliptine +situation +sium +skenan +smecta +sng +snv +sodium +soins +soir +sol +solostar +solupred +solution +sommeil +son +sondalis +sonde +sondes +sortie +sortir +sous +sous-cutanee +sous-cutané +soustons +spasfon +speciafoldine +spiriva +spironolactone +spo2 +spécialiste +ssr +statut +stilnox +stimulation +stomatologie +stomatologue +strasbourg +stylo +substipharm +sud +suite +suivi +sulfamide +sulfamides +supplementation +supplémentation +suppo +suppositoire +supérieurs +sur +surv +surveillance +susp +symbicort +syndrome +synthèse +systolique +systémiques +sénologie +tabacologie +tahor +tap +tarnos +taxotere +tazobactam +tazocilline +tca +tdm +technique +tel +telmisartan +temocilline +temperature +temporaire +temps +température +tenue +tep +terbutaline +tercian +teva +texte +thermie +thoracique +thoraciques +thoraco +thoraco-abdominal +thoraco-lombaire +thorax +ticagrelor +tinzaparine +tiorfan +tiotropium +titulaire +toilette +toilettes +total +totale +toulouse +tous +tout +traite +traitement +traitements +traité +tramadol +tranexamique +transaminases +transderm +transdermique +transfert +transfusion +transit +transmis +transmission +transmissions +tranéxamique +traumatologie +trimbow +trou +trouve +trulicity +très +tsh +ttipi +ttt +tvp +type +une +unicompartimentale +unidose +unite +unité +urg +urgence +urgences +urgent +urinaire +urinal +urine +urines +urologie +urologue +vaccination +validation +valproique +valproïque +valsartan +vancomycine +variable +vasculaire +vasculaires +velmetia +venlafaxine +ventoline +verif +vernis +verrouillé +vers +versatis +vessie +vfo +vgm +vialebex +viatris +victoza +vider +villa +viscerale +viscérale +vit +vitamine +vitaux +vni +vogalene +voie +voies +volume +votre +vrac +vts +vvp +warfarine +wind +xarelto +xatral +xenetix +zen +zentiva +zolpidem +zone +zopiclone +zydus +zymad +échelle +écho +échographie +éducation +élimination +époux +établissement +étage +évaluation +évolution diff --git a/data/villes_blacklist.txt b/data/villes_blacklist.txt new file mode 100644 index 0000000..aee6da5 --- /dev/null +++ b/data/villes_blacklist.txt @@ -0,0 +1,121 @@ +# Villes/communes à ne jamais matcher comme noms de lieux +# (homonymes de mots courants, parties du corps, etc.) +# Total : 117 entrées + +AGEN +AIRE +ALBI +ANNE +AUCH +BARRES +BEAUNE +BILLE +BLOIS +BOIS +BOURG +BRAS +BREST +CENTRE +CERGY +CHAISE +CHARGE +COEUR +CONTRE +CORPS +COU +COURANT +COURS +CREIL +CROIX +DOLE +DOS +EST +EUROPE +EVIAN +FAUX +FOIX +FORT +FOSSES +FRANCE +GARDES +GIEN +GIVET +GRAND +GRAY +HYERES +ISLE +JEAN +JOUE +LACS +LAON +LENS +LIGNE +LIGNES +LONG +LUNEL +LURE +MAISON +MARCHE +MARIE +MARS +MARSA +MAURE +MEAUX +MENDE +MENTON +MERE +MONT +MORET +MOULIN +MURET +MURS +Médecin courant +NICE +NORD +NUITS +ONDRES +ORANGE +OUEST +OUST +PARIS +PAUL +PIERRE +PLACE +PLAN +PONT +PORT +PREY +PRISON +PUITS +QUATRE +RANS +RECY +REDON +REZE +RICHE +ROMANS +ROUGE +SAINT +SALLE +SALON +SARE +SEIN +SENS +SERVICE +SETE +SIGNES +SORE +SOURCE +SUD +TOURS +TRANS +VALLEE +VAUX +VEBRE +VERS +VERT +VIENNE +VILLE +VIRE +VITRE +prurit invalidant (COU, décolleté)