Arrêtify est une librairie Python permettant la conversion d'arrêtés préfectoraux français en HTML sémantique.
Project description
Arrêtify
Arrêtify est une librairie Python permettant la conversion d’arrêtés préfectoraux français en HTML sémantique. Le document résultant est structuré au moyen de data attributes (ex. data-spec="header", data-spec="section", etc.) et enrichi de nombreuses métadonnées (dates, références juridiques, titres d’articles, etc.).
⚠️ Statut : ALPHA, développement actif. N’hésitez pas à l’essayer, à nous faire vos retours et à contribuer ! À ce stade, nous déconseillons un usage en production.
→ Pourquoi du HTML Sémantique ?
- Data & IA-ready : accès précis et facile aux données, ouvrant la voie à des cas d'usages variés - indexation, RAG, entrainement, etc.
- Web-ready : affichage direct dans un navigateur, intégration simple à toute stack web ou CMS.
- Léger et portable : un simple fichier HTML encapsule tout le contenu enrichi, sans dépendance serveur.
→ Fonctionnalités clés
- Formats d'entrée : PDF, Markdown
- Intégration OCR : compatible « out-of-the-box » avec Mistral OCR.
- Entièrement modulaire : collection de steps de traitement qui peuvent être chaînés pour construire un pipeline adapté aux besoins de l'utilisateur.
- Enrichissement sémantique : steps optionnels permettant d'enrichir le HTML en métadonnées :
- détection de références - droit français, droit européen, arrêtés connexes
- opérations de modification - abrogation, modification, d'arrêtés connexes
→ Exemples en ligne
Démarrage rapide
→ Installation :
# **NOTE**: La librairie sera disponible très prochainement sur PyPI. En attendant, vous pouvez l'installer directement depuis le repo git.
pip install git+https://github.com/mte-dgpr/arretify.git
# Modèles spacy
python -m spacy download fr_dep_news_trf
Plus d'options d'installation, voir la section options d'installation
→ Utilisation avec le CLI :
arretify -i /path/to/ocr.md -o /path/to/output.html
Pour directement convertir un document pdf, il vous faudra configurer votre clé mistral. Voir la partie configuration.
→ Utilisation depuis Python :
Convertir un document markdown (résultat d'une opération d'OCR) en HTML:
from pathlib import Path
from arretify.pipeline import save_html_file, run_pipeline, load_ocr_file
from arretify.types import SessionContext
from arretify.settings import Settings
save_html_file(
Path('/path/to/output.html'),
run_pipeline(
load_ocr_file(
SessionContext(settings=Settings()),
Path('/path/to/ocr.md'),
)
),
)
Configuration
La librairie se configure avec des variables d'environnement. Vous pourrez par exemple créer un fichier .env avec les variables suivantes :
# Si vous voulez utiliser Mistral OCR
MISTRAL_API_KEY ='<MISTRAL_API_KEY>'
# Si vous voulez utiliser la résolution de références
# aux textes de droit français.
LEGIFRANCE_CLIENT_ID = '<LEGIFRANCE_CLIENT_ID>'
LEGIFRANCE_CLIENT_SECRET = '<LEGIFRANCE_CLIENT_SECRET>'
# Si vous voulez utiliser la résolution de références
# aux textes de droit européen.
EURLEX_WEB_SERVICE_USERNAME = '<EURLEX_WEB_SERVICE_USERNAME>'
EURLEX_WEB_SERVICE_PASSWORD = '<EURLEX_WEB_SERVICE_PASSWORD>'
# Choix de l'environnement d'execution.
# Notez qu'en developpement tous les appels à API externe sont
# récupérés depuis le cache (voir `law_data\dev_cache.py`)
ENV = 'development'
CLI
Pour éxecuter le parsing sur un lot de fichiers OCRisés, copier le dossier de fichiers dans un dossier facilement accessible (e.g. ./tmp/arretes_ocr), et exécuter la commande main.py. Par exemple :
python -m main -i ./tmp/arretes_ocr -o ./tmp/arretes_html
Il est aussi possible d'éxecuter le parsing sur un fichier unique en passant en option le chemin complet d'entrée et de sortie, par exemple :
python -m main -i ./tmp/arretes_ocr/bla.txt -o ./tmp/arretes_html/bla.html
Options d'installation
Arretify est plus rapide et performant avec un GPU. Vous pouvez alors installer les dépendances optionnelles suivantes :
# Adapter selon votre version de cuda
# Pour torch : https://pytorch.org/get-started/locally/
# Pour spacy : https://spacy.io/usage
pip install torch~=2.8.0 --extra-index-url https://download.pytorch.org/whl/cu128
pip install spacy[cuda12x]~=3.8.7
Developpement
Setup
Installer la librairie et ses dépendances en mode développement :
pip install -e .[dev] # Sur Linux
pip install -e .[dev] --extra-index-url https://download.pytorch.org/whl/cu128 # Sur Windows, version CUDA à adapter selon votre cas
# Modèles spacy
python -m spacy download fr_dep_news_trf
Initialiser les sous-modules Git (qui se trouvent dans arretify/_vendor) :
git submodule update --init --recursive
Outils de développement
La librairie utilise les outils suivants :
pytestpour les testsmypyfor static type-checkingblackpour le formattage de code automatiqueflake8etflake8-bugbearpour le lintingautoflakepour la suppression automatique des imports inutilisés. Utilisation :autoflake \ --in-place \ --recursive \ --remove-all-unused-imports \ --remove-unused-variables \ --exclude=__init__.py \ arretify scripts
licenseheaderspour la gestion des en-têtes de licence dans les fichiers de code source.pre-commitpour la gestion des git pre-commit hooks
Afin d'initialiser les pre-commit hooks dans votre repository, lancer la commande suivante :
pre-commit install
Ainsi avant chaque commit un run des outils de linting sera executé pour vérifier le formattage et les fautes de style.
Testing
Pour éxecuter les tests :
pytest
Snapshot testing
Le fichier arretify/main_test.py permet de détecter les regressions en effectuant le parsing sur tous les documents de notre base de tests de documents dans arretes_ocr/ et en comparant le résultat obtenu avec des résultats obtenus précédemment et stocké dans arretes_html/.
Si les tests échouent c'est que la génération d'html a changé. Il convient donc de vérifier que c'est bien une évolution voulue et non une régression. Pour ça voici une proposition de process :
- Re-générer les fichiers html de référence en utilisant la commande
python -m arretify.main -i test_data/arretes_ocr -o test_data/arretes_html - Utiliser l'outil de diff de git (ou de vscodium) pour comparer la nouvelle version avec la version de référence
- Régler les problèmes éventuels, puis répéter étape 1.
Téléchargement des données de bases de droit
Afin de parser et résoudre les références citées dans les AP à des textes du droit français ou européen, nous téléchargeons grâce à divers scripts des fichiers contenant des listes de références à vérifier. Les fonctionalités pour accéder à ces références se trouvent dans le dossier arretify/law_data, les scripts se trouvent dans le dossier scripts.
Pour utiliser ces scripts, il faut installer et configurer la librairie du Data Studio Risques py-clients-api-droit.
Légifrance
Télécharger la liste des codes :
python ./scripts/download_data_legifrance.py -o ./arretify/law_data/legifrance
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file arretify-0.0.2.tar.gz.
File metadata
- Download URL: arretify-0.0.2.tar.gz
- Upload date:
- Size: 6.3 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1ffbe39a262ece009ce2c231ea462a7f214552d16b32433c8c674b09554b0e55
|
|
| MD5 |
93ec753f0f433e52fd9e014ff664d413
|
|
| BLAKE2b-256 |
62a4ecf5cae7c76aab4938732fde52545eccf5252fe65186ba5dbf4141be0a5f
|
Provenance
The following attestation bundles were made for arretify-0.0.2.tar.gz:
Publisher:
publish.yml on mte-dgpr/arretify
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
arretify-0.0.2.tar.gz -
Subject digest:
1ffbe39a262ece009ce2c231ea462a7f214552d16b32433c8c674b09554b0e55 - Sigstore transparency entry: 741616273
- Sigstore integration time:
-
Permalink:
mte-dgpr/arretify@288f99787ebd78c0e1cf1651c3ff82333f36eab5 -
Branch / Tag:
refs/tags/v0.0.3 - Owner: https://github.com/mte-dgpr
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@288f99787ebd78c0e1cf1651c3ff82333f36eab5 -
Trigger Event:
push
-
Statement type:
File details
Details for the file arretify-0.0.2-py3-none-any.whl.
File metadata
- Download URL: arretify-0.0.2-py3-none-any.whl
- Upload date:
- Size: 6.2 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aad6fd7e48f7591d09c2ba4d61581a3b794469d215f90a5917e69778e0b4f1cf
|
|
| MD5 |
b5ffb49eb3b7d43fe18af89ec8556e63
|
|
| BLAKE2b-256 |
8afe1701719dbf15b93cae90cbd6f2e343f83e0bc59a56a3c7332a31d061771f
|
Provenance
The following attestation bundles were made for arretify-0.0.2-py3-none-any.whl:
Publisher:
publish.yml on mte-dgpr/arretify
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
arretify-0.0.2-py3-none-any.whl -
Subject digest:
aad6fd7e48f7591d09c2ba4d61581a3b794469d215f90a5917e69778e0b4f1cf - Sigstore transparency entry: 741616288
- Sigstore integration time:
-
Permalink:
mte-dgpr/arretify@288f99787ebd78c0e1cf1651c3ff82333f36eab5 -
Branch / Tag:
refs/tags/v0.0.3 - Owner: https://github.com/mte-dgpr
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@288f99787ebd78c0e1cf1651c3ff82333f36eab5 -
Trigger Event:
push
-
Statement type: