Phase 3 : sources, citations et seed complet — 368 sources, 0 texte orphelin
Parseurs : - blocs_claim : les quatre dialectes des rapports de dimension. Le cahier des charges en postulait un seul ; sans les quatre, dim05 à dim12 étaient perdus, soit les dimensions associations, entreprises, migration et calendrier. - notes_bas_page : 258 notes, dont 104 sans URL. Les identifiants JORFTEXT donnent lieu à une URL canonique reconstruite (schéma fixe, rien d'inventé) ; les autres restent sans lien plutôt que d'être devinées. - bibliographie : 481 références, toutes liées. Indexées par numéro de loi, par affaire DC et par cote de document parlementaire — cette dernière étant la seule identité d'un texte déposé et non examiné. - chapitres : rattachement phrase par phrase, résumés repris tels quels. Résolution des citations : 100 % des 332 marqueurs du rapport, 93 % avec un lien vérifiable. Il a fallu six conventions de numérotation, une par famille de dimension (marqueur de fin, en-tête de claim, section, rang, note, section.rang). Trois pièges corrigés, tous couverts par des tests : - « décision n° 2026-903 DC » lu comme une loi, ce qui volait à la loi 2026-403 les phrases — et donc les sources — qui parlaient d'elle - retrait des marqueurs laissant « … dans les DROM . » ; corrigé à la source sans toucher aux espaces avant « ; » et « » » qu'exige le français - « programmation militaire 2024-2030 » lu comme la loi n° 2024-2030 make seed : 52 textes, 368 sources, 83 événements, 12 affaires CC, 7 analyses. Zéro texte sans source URL (critère §8.2). Les 2 textes sans résumé et les 17 pertinences déduites sont marqués « à vérifier » avec leur motif. 99 tests. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
c36b8dc631
commit
c28243cf87
@@ -13,6 +13,9 @@ from dataclasses import dataclass, field
|
||||
# Marqueurs du corpus : [^dim07-24^], [^phase5-3.1^], [^insight-5^], [^481^]
|
||||
MOTIF_MARQUEUR = re.compile(r"\[\^([a-zA-Z0-9]+(?:-[0-9.]+)?)\^\]")
|
||||
|
||||
# Le marqueur avec l'espace qui le précède, pour un retrait sans cicatrice.
|
||||
_MARQUEUR_ET_ESPACE = re.compile(r"[ \t]*(?:\[\^[a-zA-Z0-9]+(?:-[0-9.]+)?\^\])+")
|
||||
|
||||
_EMPHASE = re.compile(r"\*{1,3}(.+?)\*{1,3}", re.DOTALL)
|
||||
_LIEN_MD = re.compile(r"\[([^\]]+)\]\(([^)]+)\)")
|
||||
_CODE = re.compile(r"`([^`]+)`")
|
||||
@@ -114,7 +117,11 @@ def nettoyer(texte: str, *, garder_marqueurs: bool = False) -> str:
|
||||
resultat = _LIEN_MD.sub(r"\1", resultat)
|
||||
resultat = _EMPHASE.sub(r"\1", resultat)
|
||||
if not garder_marqueurs:
|
||||
resultat = MOTIF_MARQUEUR.sub("", resultat)
|
||||
# L'espace qui précède le marqueur est consommée avec lui, sinon le
|
||||
# retrait laisse « … dans les DROM . ». On ne touche surtout pas aux
|
||||
# autres espaces : la typographie française en veut une avant « ; »,
|
||||
# « : », « ! », « ? » et à l'intérieur des guillemets « … ».
|
||||
resultat = _MARQUEUR_ET_ESPACE.sub("", resultat)
|
||||
return " ".join(resultat.split()).strip(" ;,")
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user