84 lines
2.6 KiB
Python
84 lines
2.6 KiB
Python
"""Découpage des tableaux, nettoyage et marqueurs de citation."""
|
|||
|
|
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
from pipeline.parseurs.markdown import (
|
||
|
|
decouper_sections,
|
||
|
|
extraire_marqueurs,
|
||
|
|
extraire_tableaux,
|
||
|
|
nettoyer,
|
||
|
|
)
|
||
|
|
|
||
|
|
TABLEAU = """\
|
||
|
|
## Tableau d'essai
|
||
|
|
|
||
|
|
| Col A | Col B |
|
||
|
|
|---|---|
|
||
|
|
| a1 | b1 |
|
||
|
|
| a2 | b2 |
|
||
|
|
|
||
|
|
Texte après le tableau.
|
||
|
|
"""
|
||
|
|
|
||
|
|
|
||
|
|
def test_extraire_tableaux_simple() -> None:
|
||
|
|
(tableau,) = extraire_tableaux(TABLEAU)
|
||
|
|
assert tableau.entetes == ["Col A", "Col B"]
|
||
|
|
assert tableau.lignes == [{"Col A": "a1", "Col B": "b1"}, {"Col A": "a2", "Col B": "b2"}]
|
||
|
|
assert tableau.section == "Tableau d'essai"
|
||
|
|
assert len(tableau) == 2
|
||
|
|
|
||
|
|
|
||
|
|
def test_extraire_tableaux_tolere_une_ligne_courte() -> None:
|
||
|
|
source = "| A | B | C |\n|---|---|---|\n| 1 | 2 |\n"
|
||
|
|
(tableau,) = extraire_tableaux(source)
|
||
|
|
assert tableau.lignes == [{"A": "1", "B": "2", "C": ""}]
|
||
|
|
|
||
|
|
|
||
|
|
def test_extraire_tableaux_respecte_les_barres_echappees() -> None:
|
||
|
|
source = "| A | B |\n|---|---|\n| x \\| y | z |\n"
|
||
|
|
(tableau,) = extraire_tableaux(source)
|
||
|
|
assert tableau.lignes[0]["A"] == "x | y"
|
||
|
|
|
||
|
|
|
||
|
|
def test_extraire_tableaux_sur_le_corpus_reel(annexe: str) -> None:
|
||
|
|
tableaux = extraire_tableaux(annexe)
|
||
|
|
assert len(tableaux) == 2
|
||
|
|
tableau_a, tableau_b = tableaux
|
||
|
|
assert tableau_a.entetes[0] == "N° de loi"
|
||
|
|
assert len(tableau_a) == 27, "27 lois promulguées attendues au tableau A"
|
||
|
|
assert tableau_b.entetes[0] == "Texte"
|
||
|
|
assert len(tableau_b) == 23
|
||
|
|
|
||
|
|
|
||
|
|
def test_nettoyer_retire_emphase_et_marqueurs() -> None:
|
||
|
|
brut = "**Adoptée, non promulguée** (21 juill.) ; saisine [^dim04-487^][^phase5-3.1^]"
|
||
|
|
assert nettoyer(brut) == "Adoptée, non promulguée (21 juill.) ; saisine"
|
||
|
|
|
||
|
|
|
||
|
|
def test_nettoyer_peut_garder_les_marqueurs() -> None:
|
||
|
|
brut = "Chlordécone [^dim07-24^]"
|
||
|
|
assert nettoyer(brut, garder_marqueurs=True) == "Chlordécone [^dim07-24^]"
|
||
|
|
|
||
|
|
|
||
|
|
def test_extraire_marqueurs_distingue_les_dimensions() -> None:
|
||
|
|
marqueurs = extraire_marqueurs("[^dim07-24^] et [^phase5-3.1^] et [^insight-5^] et [^42^]")
|
||
|
|
assert [(m.dimension, m.numero) for m in marqueurs] == [
|
||
|
|
("dim07", "24"),
|
||
|
|
("phase5", "3.1"),
|
||
|
|
("insight", "5"),
|
||
|
|
("", "42"),
|
||
|
|
]
|
||
|
|
|
||
|
|
|
||
|
|
def test_extraire_marqueurs_dedoublonne() -> None:
|
||
|
|
assert len(extraire_marqueurs("[^dim01-3^] [^dim01-3^] [^dim01-4^]")) == 2
|
||
|
|
|
||
|
|
|
||
|
|
def test_decouper_sections() -> None:
|
||
|
|
source = "# Titre\ncorps un\n\n## Sous\ncorps deux\n"
|
||
|
|
sections = decouper_sections(source)
|
||
|
|
assert [s.titre for s in sections] == ["Titre", "Sous"]
|
||
|
|
assert sections[0].corps == "corps un"
|
||
|
|
assert sections[1].niveau == 2
|