-
Notifications
You must be signed in to change notification settings - Fork 17
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Hyperliens dans le corps du texte #2
Comments
Tout à fait faisable à l'aide des |
Merci @tianyikillua pour la pull request, je n’ai pas encore testé mais ça a l’air bien. Avant de l’intégrer, j’aimerais ajouter un switch pour créer telle ou telle sorte de dépôt Git, par exemple avec ou sans sommaire, avec ou sans hyperliens, avec tout le texte sur une page ou au contraire dans dans des sous-dossiers, en Markdown classique ou Markdown GitHub ou wikitexte ou etc. Depuis que j’ai commencé Archéo Lex, je vois des réutilisateurs intéressés par telle ou telle version, donc au lieu de n’en sélectionner qu’une seule, je préfère rendre le code modulaire pour contenter tout le monde. Cette orientation vient aussi du fait que les commits Git sont sensibles au moindre changement (par exemple rajouter des hyperliens va complètement réécrire l’historique Git) et j’ai eu des demandes d’utiliser les historiques Git créés par Archéo Lex comme des identifiants pérennes de tel ou tel changement de la loi. Je viens de créer #20 pour détailler cette orientation. |
Voir aussi ce post pour un moteur plus général de création de liens. |
La détection des liens dans le corps d'un texte sera dans la prochaine version de legi.py. Legilibre/legi.py#4 |
Et quelle est ta méthode ? Expressions rationnelles ? Voir aussi ces expressions chez Regards Citoyens et ce compte-rendu. |
Oui, des regexp. Elles sont similaires à ta grammaire PEG mais gèrent plus de cas. |
J’ai commencé une librairie dédiée avec la grammaire PEG, un peu améliorée pour l’occasion. C’est sur https://framagit.org/parlement-ouvert/metslesliens, et les résultats sont vraiment bons. J’ai vérifié à la main sur la loi 78-17 (100% de reconnaissance sans faux positifs (ni faux négatifs du coup)) et sur le début du code civil. Le CGI est l’épreuve du feu dans ce domaine. En parallèle, j’ai fait une doc technique/légistique sur les noms d’articles en extrayant tous ceux-ci de legi.py -- cette doc a été faite avec des regex mais il faudrait désormais regarder avec la grammaire. En résumé, il est relativement facile de capturer 90% des noms d’articles, mais il y a une marche pour faire plus, du moins si on ne veut pas trop augmenter le nombre de faux positifs (notamment lorsque les noms d’articles ont des lettres "A", "B", "AC", "a", "b", il faut alors limiter le nombre de caractères pour ne pas capturer tout le reste de la phrase) et en vérifiant que les performances restent correctes. |
J’ai regardé vite fait le PEG (je n’ai pas [encore] de compte framagit) et sans avoir autant d’expérience des textes: |
RésultatsUn petit showcase de résultats : Accents/majuscules/espacesEffectivement, ça ne m’étonnerait pas que ça existe, mais je ne sais pas à quel point. Pour y répondre, il faudrait soit prendre quelques textes au hasard et chercher de tels cas, soit améliorer le programme pour prendre ça en compte. Sur les espaces, j’ai essayé dans la grammaire de toujours utiliser les règles "espace" (un ou plusieurs espaces) ou "espacevide" (zéro ou plusieurs espaces), sauf dans la liste des codes qui reste vulnérable à ce problème du nombre d’espaces. La règle "espacevide" par exemple est nécessaire car il n’y a pas toujours d’espace après une virgule (cf exemple code civil). Sur les espaces, ça doit pouvoir se gérer, le plus difficile est les accents et majuscules. À long terme, oui, je pense qu’il faudra à long terme gérer ces cas accents/majuscules, et je ne vois pas trop d’autre solution [efficace] que le pre-processing, en retirant les accents/majuscules (voire les doubles espaces). J’ai une petite crainte car il faudrait rajouter dans la règle les noms du type "article 3 bis AB" ou "article 3 ter ab" et pour capturer ça il faut absolument limiter le nombre de caractères du "AB" ou "ab" sinon ça va tout capturer, et éventuellement le fait qu’il y ait des majuscules peut aider à la reconnaissance (les cas "ab" sont assez minoritaires). Éventuellement, lors de tests, on peut appliquer une grammaire "normale" et une grammaire "normalisée" et vérifier les différences de reconnaissance. Articles vraiment bizarresEn fin de la doc légistique il y a quelques exemples choisis. J’ai mis au bout de ce lien la liste exhaustive des exceptions. |
La suppression des espaces redondantes est déjà dans le nettoyeur HTML de legi.py, il n'est donc pas nécessaire de les prendre en compte lors de la détection des liens. |
Ok, merci. Par contre, cette librairie pourrait être utilisée dans d’autres contextes que Archéo Lex/legi.py, notamment sur des propositions/projets de loi (rien de réellement prévu pour l’instant, mais je me dis que ça pourrait être utilisé utile pour des dossiers similaires à celui-ci où les liens avaient été fait en partie à la main). |
Mon commentaire était centré sur legi.py mais en fait la suppression des espaces redondantes devrait toujours être traitée avant (pre-processing). |
Beau boulot @Seb35. Je bosse un peu sur la détection des liens dans legi.py aujourd'hui, ce que tu as fait me permet de vérifier et d'améliorer ce que j'avais déjà. |
Il va falloir ajouter une étape de nettoyage des numéros d'article. Il va même falloir faire du découpage en fait, parce qu'un article "28 à 30" (legifrance) ce n'est évidemment pas correct. |
Tickets pour le nettoyage des numéros d'articles et le découpage de certains articles : Legilibre/legi.py#35 et Legilibre/legi.py#34. |
Dans la librairie Sur les fautes d’orthographe, je n’ai pas encore d’idées arrêtées sur le sujet, soit il est possible de faire une grammaire laxiste, soit faire deux grammaires, une normale et une laxiste, et on fait tourner les deux pour faire ressortir les erreurs (orthographe, casse, accents…). |
Cette issue est en partie résolvable par la librairie
Pour toutes ces raisons, je m’oriente vers le point 1. i. qui délègue au réutilisateur les différents choix des points 2 et 3. Éventuellement, à plus long terme, il peut aussi être possible de créer un système de plugins pour que le réutilisateur implémente sa propre classe Python avec ses choix pour générer directement des dépôts Git avec des liens dans le texte (quoique cela briserait les hash/condensats Git par rapport à la version sans liens). |
Mes deux centimes : Pour le point 2, il est normalement valide d'utiliser du HTML dans du Markdown. Du coup, il serait possible de forcer les ids à utiliser soit en remplaçant les titres en Markdown par des titres HTML avec un attribut id fixé (au prix d'une petite perte de lisibilité), soit en ajoutant un paragraphe / |
Une autre idée en passant : Tant qu'à avoir le code numérisé, il pourrait être cool de faire des liens hypertextes entre les articles, lorsqu'ils sont référencés, pour naviguer facilement entre les articles. Et tant qu'à faire, on peut même imaginer mettre l'article référencé dans un
title
pour avoir tout le texte au survol de la référence :)The text was updated successfully, but these errors were encountered: