Spaces:
Runtime error
Runtime error
Commit History
-
fix(decoupage): l'article 1er illisible ne sort plus de l'index vectoriel
Le cachet et le sceau recouvrent souvent, dans la marge, le marqueur de l'article 1er. Illisible, l'article partait avec les visas (base legale), ou se collait a la formule d'execution quand c'est l'article 2 qui etait illisible — dans les deux cas hors de l'index vectoriel. Audit du decoupage sur les 2238 documents extraits : 53 n'avaient AUCUN vecteur. Apres correction : 1 (une page que l'OCR n'a pas su lire), et 83 articles reconnus en plus, aucun en moins. - Ce qui suit « DECRETE : », « ARRETE : » ou la formule de promulgation devient un chunk DISPOSITIF, traite comme un article ; a defaut de ces mots, ce qui suit le dernier visa, s'il fait une vraie phrase. - Un chunk n'est une formule d'execution que s'il ne reste presque aucun mot hors des paragraphes qui la portent. - Marqueurs ecorches releves sur tout le corpus : « ARTICIE », « ARTCLE », « RTICLE », « ARTTICLE », « Artice », « ARTI CLE1er », « Article ler », et prefixes parasites (« ■ ARTiCLE », « ww ARTICLE », « 1…f8209f9
-
feat(decoupage): les sorties Docling decoupees sans perte
Mesure sur les sorties Docling du corpus (banc OCR, puis pilote de 19 documents), chaque regle payee par un defaut constate. Nettoyage (markdown_cleanup) : - cachet tolerant a l'OCR (mots colles, lettres confondues), en capitales seulement : « une copie certifiee conforme » a fournir reste du texte ; - filigrane rendu en tableau d'une cellule, lambeaux du cachet ; - nettoyer_markdown met a plat titres et marqueurs decores (« ## ARTICLE », « - ARTICLE 12.- », « ARTIiCLE 81 ») : le sommaire de la page de lecture en voyait 155 sur 191, il en voit 189. Decoupe (text_chunker) : - marqueurs « ARTICLE_1er », « 2. ARTICLE 41.- », mot ecorche par l'OCR, ordinaux jusqu'a la centaine, en-tetes colles (« CHAPITREII ») ; - un renvoi en liste (« - article 12 de la loi ») ne coupe plus l'article. Raffinage (chunk_refiner) : - une liste nominative garde ses noms dans le contenu : elle n'etait enregistree nulle part ailleurs. Seul le vecteur prend la forme resumee, et une longue liste es…14eb55e
-
fix(qualite): ruff devient une vraie barriere, et trouve un schema mort et casse
Ruff tournait sans jeu de regles declare : 1332 signalements, dont 98 faux positifs sur le motif `Depends()` de FastAPI et 615 modernisations de style. Un controle que personne ne peut passer n'est pas un controle. Le jeu retenu ne garde que ce qui signale un defaut reel (F, E4, E7, E9, I, RUF100), avec des exceptions nommees la ou l'ordre des imports EST la protection : env.py doit poser sys.path avant d'importer les modeles, conftest doit surcharger DATABASE_URL avant d'importer l'application. Ce que le controle a alors trouve : - UN SCHEMA MORT ET CASSE. `LawDetailResponse` existait deja, exposant `List[ArticleResponse]`. Il n'etait branche sur aucune route, et il etait doublement inutilisable : ArticleResponse porte le CONTENU integral de chaque article — pour le Code Minier, 166 Ko servis deux fois — et son `number` etait plafonne a 20 caracteres alors que la colonne en fait 64 depuis qu'elle accueille « QUATRE-VINGT-DIX-SEPTIEME ». Le plafond du schema est corrige, et…7435134 -
feat(recherche): le titre passe devant le corps du texte, et les fautes de frappe passent
Trois demandes utilisateur, quatre causes. 1. Chercher "nomination" remontait des documents sans ce mot dans leur titre, et le moins pertinent sortait premier. `articles.search_vector` ne contenait ni le titre de la loi ni celui de l'article ; `laws.search_vector` collait titre et contenu sans un seul `setweight` ; et la seule branche qui voyait `laws.title` etait gardee derriere `if not chunks:`, donc jamais executee. Mesure avant : le decret SOCADEL (titre sans le mot) sortait a 0,4000 devant cinq documents dont le titre le porte, a 0,2000. Apres ponderation : 2,10 contre 0,20. 2. "article 35 du code minier" ne pouvait pas aboutir : le decoupeur attendait `Article 35` la ou le markdown ecrit `**ARTICLE 1er.**-` et `**Article1er.-**`. 8 lois sur 27 avaient un numero reconnu, contre 27 sur 27 apres correction ; 127 numeros reels contre 599. Le Code Minier passe de 41 a 193 articles. 3. Aucune tolerance aux fautes : `word_similarity` sur titre deplie, s…893a679
-
Etape 8 : trois bugs du chunker, dont une perte silencieuse de contenu
1. PERTE DE CONTENU (le plus grave) SECTION_PATTERNS utilisait l'alternative de chiffres romains 'I{1,3}V?|IV|V?I{0,3}' — or V?I{0,3} peut matcher la CHAINE VIDE. 'TITRE\s+' suffisait donc a declencher une detection de section : un article intitule "Titre niveau 1" etait pris pour un en-tete, son contenu coupe a zero caractere, puis ecarte comme "trop court". Tout article dont le titre commence par Titre ou Chapitre etait PERDU, sans erreur ni trace. -> [IVXLC]{1,7}, qui ne peut pas etre vide. 2. NUMEROTATION HIERARCHIQUE FUSIONNEE Le groupe capturant s'arretait au premier nombre : '(\d+)(?:er|ère|ème)?(?:\.\d+)*' capturait '1' pour "Article 1.1". Les sous-articles fusionnaient donc avec leur parent — une erreur de citation sur une base juridique. -> '(\d+(?:\.\d+)*)(?:er|ère|ème)?'. Verifie : 1, 1.1 (parent 1), 1.1.1 (parent 1.1), 2. 3. TITRES JAMAIS RENSEIGNES _extract_title etait definie mais appelee NULLE PART : title etait passe en dur a…a00940a
-
chore: initial standalone backend for JuriX API (Render)
9cf9a2a