Skip to content

Détection par regex des mentions de collaboration externe dans les amendements#9

Open
DavidNO wants to merge 2 commits into
create-parliamentary-dbfrom
detect-mentions
Open

Détection par regex des mentions de collaboration externe dans les amendements#9
DavidNO wants to merge 2 commits into
create-parliamentary-dbfrom
detect-mentions

Conversation

@DavidNO

@DavidNO DavidNO commented Jul 16, 2026

Copy link
Copy Markdown
Collaborator

Objectif

Détecter les amendements dont l'exposé sommaire déclare une collaboration ou une inspiration avec une entité externe (lobby, syndicat, association, entreprise, fédération professionnelle, ONG…) — formulations du type « travaillé avec… », « en concertation avec… », « inspiré de… ».

Détecteur par expressions régulières.

Empilé sur #8 (création de la base) : base = create-parliamentary-db. À rebaser sur main une fois #8 mergé.

Contenu

Table d'analyse (models/amendement_mention.pyamendement_mentions)

  • Une ligne par mention : amendementUid, citation, formulation, entite, typeEntite, externe, modele, createdAt.
  • Table d'analyse hors ETL_TABLES : survit aux rebuilds pendant que amendements/dossiers sont recréées.
  • amendementUid est une référence molle (pas de ForeignKey), sur le modèle des RefUid existants, pour ne pas bloquer le drop des tables ETL.

Détecteur regex (analysis/detect_mentions_regex.py)

  • Familles de motifs calibrées sur les formulations réellement observées dans le corpus : travaillé avec, en collaboration/concertation avec, inspiré de, issu d'une proposition de, proposé par, à la demande de, avec le concours de, recommandation de
  • Exclusions contextuelles pour limiter les faux positifs : acteurs publics/parlementaires juste après la tournure (Gouvernement, commission, rapporteur, Conseil d'État…), référents juridiques après « inspiré de » (loi, article, procédure…), référents textuels après les tournures citation (« proposé par le texte », « le rapport », « le groupe X »…).
  • --persist : écriture dans amendement_mentions, scopée au tag modele='regex:v1' (les lignes d'autres détecteurs ne sont jamais touchées).

Docs : section « Analyse : détection des mentions » ajoutée au README (usage du détecteur, sorties, table d'analyse et survie au rebuild).

Résultats sur le corpus complet (123 084 amendements AN, législature 17)

  • 96 722 amendements ont un exposé sommaire exploitable.
  • 10 866 amendements (11,2 %) contiennent au moins une mention (11 962 mentions).
  • Top formulations : travaillé avec (6 337), proposé par (1 956), recommandation de (815), en collaboration avec (692), issu d'une proposition de (662), inspiré de (581)…

Évaluation contre un jeu de référence

Motifs calibrés et évalués contre un jeu de référence de 797 amendements annotés par un LLM (détecteur exploratoire conservé sur la branche detect-mentions-poc, non destiné à être mergé) :

Référence Précision Rappel F1
Mentions externes (hors institutions politiques) 92,7 % 92,7 % 92,7 %

Exemples de faux négatifs (« le CNB demandent », « l'Interfédération a relevé ») : constructions sujet → verbe, hors de portée d'un regex, qui demanderaient une passe NER/LLM.

DavidNO added 2 commits July 19, 2026 11:09
Stocke les mentions de collaboration externe détectées dans l'exposé
sommaire des amendements. Table d'analyse (hors ETL_TABLES) : elle survit
aux rebuilds via create_all, pendant que amendements/dossiers sont
détruites puis rechargées.

amendementUid est une référence molle vers amendements.uid (sans
ForeignKey), sur le modèle des RefUid du modèle Amendement, afin qu'aucune
contrainte référentielle ne bloque le drop de la table amendements gérée
par l'ETL. Une ligne par mention ; provenance conservée via
modele/createdAt.
Repère les amendements dont l'exposé sommaire déclare une collaboration
ou une inspiration avec une entité externe (lobby, syndicat, association,
entreprise, ONG...). Les familles de motifs sont calibrées sur les
formulations observées sur le corpus réel : travaillé avec, en
concertation avec, inspiré de, issu d'une proposition de, proposé par,
à la demande de...

Des exclusions contextuelles maintiennent la précision : acteurs publics
ou parlementaires juste après la tournure (Gouvernement, commission,
rapporteur, Conseil d'État...), référents juridiques après « inspiré de »
(loi, article, procédure...), référents textuels ou de rôle après les
familles de type citation (le texte, le rapport, le groupe X,
l'autorité...).

Repérage seul : remplit citation + formulation, laisse entite/typeEntite/
externe à NULL (qualifier l'entité demande une analyse sémantique). Avec
--persist, les lignes sont écrites dans amendement_mentions taguées
modele='regex:v1' ; les ré-exécutions sont idempotentes par amendement et
scopées à ce tag.

Documente aussi l'usage du détecteur dans le README.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant