Nuit du code citoyen Rennes 2018/Lois

De Movilab.org
Aller à : navigation, rechercher

Un petit groupe s’est intéressé au thème de la publication et traitement de la Loi lors de la Nuit du code citoyen Rennes 2018. Noter que la Nuit du code citoyen Paris 2018 accueille le Bureau ouvert sur la même thématique.

Personnes

Idées des projets

  1. Création d’un lexique Français vulgaire ↔ Français juridique (idée de VIGNERON)
    • Lister tout les mots présents dans les textes de lois et les trier par ordre de fréquence d'utilisation
  2. Sémantiser le corpus juridique français, pour interroger ensuite en SPARQL, ontologie et étendue exactes à réfléchir (lois, amendements, liens vers le Web sémantique (et notamment Wikidata), etc. ; où stocker ceci : Wikidata, base de données sémantique dédiée ?) / idée de Seb35
    Coïncidence : un message sur le Bistro de Wikidata ce matin propose de mettre sur Wikidata les lois françaises. Un projet Wikidata:WikiProject France/Législation a été crée sur Wikidata par VIGNERON (page assez vide pour le moment, réflexions lancées en page de discussion).
  3. Utiliser les liens (existants ou à générer) dans le corps de textes des lois, par exemple sur les personnes / les lieux /etc. (idée de VIGNERON)
    • Faire un rendu visuel sous forme de graphe / timeline / whatever
  4. Implémenter les liens internes entre articles/textes (dans un 1er temps, externes ensuite car besoin de définir une organisation des textes) (issue Archéo Lex #2)

Activités faites

Vendredi soir :

  • Installation de legi.py + Archéo Lex par Pierre-Yves et luffah, amélioration du README de Archéo Lex [1]
  • Documentation de la DTD de la base LEGI par luffah, notamment sur les liens entre articles/textes (en préparation du projet 5) [2]

Samedi :

  • Discussion sur une sémantisation des lois et autres textes sur Wikidata, concomitamment avec un message laissé sur le Bistro de Wikidata (Seb35, VIGNERON)
    • un projet législation française a été créé sur Wikidata [3]
    • les premières discussions sont sur l’état des lieux et la structure/l’ontologie à adopter
  • Seb35 a pushé une nouvelle version majeure d’Archéo Lex en cours de préparation depuis 2 semaines, qui est notamment plus rapide, mais il manque certaines parties à cause d’une optimisation trop agressive, recherche du problème (non-terminée à la fin de la journée)
  • Recherche de documentation sur le système NOR et notamment la liste des ministères (les 3 premières lettres)
    • La circulaire du 8 décembre 1986 mentionne qu’elle est présente sur le 3615 JOEL 5, mais le système est malheureusement désactivé
    • Les recherches sur le Web n’ont que des faux positifs car tous les textes ont un NOR
    • VIGNERON a trouvé un livre sur Google Books de 2011 comportant une liste non-exhaustive mais assez fournie [4] [5] (chercher "numéro NOR" dans la recherche interne du livre)
    • SOLON renseigne automatiquement le NOR d’après le guide légistique, la table de codification est gérée par le SGG
  • Étude d’ajout de liens hypertextes entre textes (VIGNERON, Seb35, Pierre-Yves)
    • Discussion sur IRC avec Roux de Regards Citoyens à propos de leur parser de liens, cf #Autre
    • Étude des regexes de Regards Citoyens, non-terminée
    • Mise en place d’un embryon de détection de liens [6]
    • Il se trouve que, bien que la base LEGI possède des métadonnées de liens, l’intitulé exact n’est pas conservé entre le corps du texte et la métadonnée de lien, par exemple sur [7] il y a un lien interne intitulé "article 222 du décret du 7 novembre 2012 susvisé" dans le corps du texte et noté "Décret n°2012-1246 du 7 novembre 2012 - art. 222" dans la métadonnée de lien : afin de faire la correspondance entre l’un et l’autre, il est donc obligatoire de rechercher dans le corps du texte des liens (avec des regexes ou autre), de faire une opération similaire dans les métadonnées (la forme semble plus standardisée) et de faire l’alignement entre les deux. Autrement dit, la source de liens n’aide pas à la reconnaissance des liens ; elle permet toutefois d’avoir la cible de lien.
    • Discussion sur les "plages d’articles", par exemple Légifrance a pris le partie suivant sur L111-1 du CPI : "articles [L. 121-7-1](article L121-7-1) et [L. 131-3-1 à L. 131-3-3](article L131-3-1)" ; ça semble l’option la plus directe, à voir si on souhaite d’autres comportements (dans ce cas faire des variantes)
    • VIGNERON propose de faire des regexes sur l’expression "L\. [0-9-]+" ; il ne devrait pas y avoir trop de faux positifs (trouvé "avril 2016" mais le point empêche cette capture), mais il y aura des faux négatifs du fait que des lettres sont parfois utilisées, notamment dans le CGI (1690-1 A bis) ; non-testé, à creuser et évaluer
    • Il avait été envisagé de travailler d’abord sur les liens internes (car pas besoin d’avoir un "routeur" vers les autres textes), mais la détection de liens doit reconnaître tous les liens, internes et externes : par exemple si on ne repère que les expressions "article [0-9-]+" au sein d’un code et qu’on les interprète comme des liens internes, l’expression "article 21-7 de la loi 31-10 du 19 janvier 1931" aura un lien interne sur le début de l’expression, ce qui serait faux
    • Sur les expressions bis, ter, quater, on s’est demandé jusqu’où ça allait (la regex de Regards Citoyens est incomplète), on a trouvé jusqu’à septtricies (37, art. 1609 septtricies), le Conseil constitutionnel a censuré un art. 1609 octotricies et l’Assemblée a eu un projet de loi comportant un art. 15 novotricies (nouveau), pas d’article quadrigies en vue
    • Au retour de Pierre-Yves, celui-ci a proposé d’utiliser des PEG (Parsing Expression grammar) plutôt que des expressions rationnelles et la librairie Python parsimonious, piste à explorer

Autre

Log IRC de discussion sur la création de liens internes :

<seb35> hello
<seb35> est-ce que vous auriez le lien vers la librairie qui génère les liens dans les textes de loi
<seb35> ça avait été évoqué lors de la réu Médialab mercredi dernier
<seb35> je suis en train d’ajouter à Archéo Lex les liens dans la législation en vigueur
<seb35> pour l’instant je compte utiliser les métadonnées présentes dans la base LEGI
<seb35> il n’y a qu’une partie des liens, par exemple dans https://www.legifrance.gouv.fr/affichTexteArticle.do?idArticle=LEGIARTI000030127325&cidTexte=LEGITEXT000030127306 il n’y a qu’un lien (que je vais donc ajouter), mais il manquera 2 autres liens
<seb35> et en fait même pour les liens décrits dans les métadonnées il faut que je les intègre au texte et j’ai un besoin minimum d’une bonne regex
<seb35> je vais en faire une, mais toute implémentation un peu plus évoluée serait intéressante
<Roux> hello seb35 !c pas vraiment une librairie
<seb35> si c’est du code quelque part, ça m’intéresse aussi
<Roux> c un ensemble de regexp assez laid : https://github.com/regardscitoyens/nosdeputes.fr/blob/master/apps/frontend/modules/loi/templates/_alinea.php
<Roux> je sais pas si c très lisible :p
<Roux> l'essentiel est ce morcreau https://github.com/regardscitoyens/nosdeputes.fr/blob/master/apps/frontend/modules/loi/templates/_alinea.php#L15-L35
<Roux> ça marche par alineéa et suppose d'avoir déjà analysé et stocké un champ sur l'alinéa disant cet alinéa porte sur tel code/loi
<Roux> c du coup imparfait quand un alinéa réfère à plusieurs lois
<Roux> ça n'a pas été utilisé depuis 5 ou 6 ans donc je saurai plus en dire bcp plus
<Roux> et ensuite les routes redirect font du google j'ai de la chance ici  https://github.com/regardscitoyens/nosdeputes.fr/blob/master/apps/frontend/modules/loi/actions/actions.class.php#L205-L222
<seb35> Roux, merci, je regarderai en détails

Suites

Grammaire PEG de description d’un lien

numarticle = ~r"([LDR]\.?|LO)?( *[0-9-]+| *[a-z])+"i
cies = ~r"(semel|bis|ter|quater|(quinqu|sex|sept|oct|non)ies|(un|duo|ter|quater|quin|sex|sept|octo|novo)?(dec|vic|tric|quadrag|quinquag|sexag|septuag|octog|nonag)ies)"

nature = "arrêté" / "code" / "décret" / "loi" / "ordonnance"
denature = "de l['’]arrêté" / "du code" / "du décret" / "de la loi" / "de l['’]ordonnance"
numtexte = ~r" *n° *(1[789]|20)?[0-9]{2}-[0-9]+"

jour = ~r"(1er|[1-9]|[12][0-9]|3[01])"
mois = "janvier" / "février" / "mars" / "avril" / "mai" / "juin" / "juillet" / "août" / "septembre" / "octobre" / "novembre" / "décembre"
annee = ~r"(1[789]|20)[0-9]{2}"
date = "du " jour " " mois " " annee

lientexte = nature numtexte? date?
lienarticle = "article " numarticle (" " cies)?
lien = lienarticle? denature? numtexte? date?