Spaces:
Runtime error
Runtime error
Commit History
-
fix(decoupage): un long chapeau d'article n'est plus tronque a 200 caracteres
Un article trop long se coupe a ses alineas (1), (2), (3). Le texte qui precede le premier alinea (le chapeau) n'etait garde qu'en prefixe de 200 caracteres devant chaque morceau : au-dela, il ne figurait nulle part en base. Ni la recherche ni le chat ne pouvaient le lire. Cas releve : loi 2010/012 sur la cybercriminalite. Les articles 69 a 74 al. 2, colles sur une ligne par l'OCR, formaient le chapeau d'un « article 69 » coupe aux alineas de l'article 74 : il en restait « …celui qui accede san ». Mesure sur jurix_dev : 58 paragraphes (environ 33 000 caracteres) perdus dans une vingtaine de lois, dont le Code penal, le Code de procedure penale, le Code du travail et les lois 2010/012 et 2010/013. Un chapeau long ouvre desormais le premier morceau EN ENTIER (aux paragraphes s'il depasse lui-meme la taille cible), et seul son debut est repete devant les morceaux suivants. Simulation sur les 2275 lois : 15 lois changent, la perte disparait dans 13 d'entre elles ; les autres decoupages s…a42c933
-
feat(decoupage): les grands tableaux coupes entre leurs lignes, le cachet mieux retire
Tableaux. Ils n'etaient jamais coupes : ceux des lois de finances faisaient des chunks jusqu'a 79 000 caracteres, dont l'embedding ne lisait que les 10 000 premiers (110 chunks du corpus). Un tableau markdown se coupe desormais entre deux lignes, jamais au milieu d'une ; chaque morceau repete l'en-tete du tableau et le debut de l'article. Une premiere ligne de donnees prise pour un en-tete n'est pas repetee. Listes nominatives. Le texte de nomination se cherche hors des tableaux : « PROMOTION DE LA FEMME », intitule de programme d'une loi de reglement, faisait d'un tableau budgetaire une liste de 35 personnes. Et des que les tableaux reconnus portent la majorite des lignes, tous les tableaux de l'article sont de la liste : ceux que la detection manquait restaient dans le texte vectorise (155 000 caracteres pour 4 229 gardiens de la paix). Audit sur les 2238 documents : chunks de plus de 10 000 caracteres de 110 a 1 ; plus gros texte vectorise de 136 601 a 15 931 caracteres ; un seul …911f84f -
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
-
feat(ocr): extraction LlamaParse et raffinage des chunks pour le RAG
La couche texte des PDF scrapes depuis prc.cm est inexploitable : mesuree a ~20% de rappel sur 6 pages representatives (filigrane www.prc.cm insere au milieu des phrases, cachets officiels lus comme du charabia, et 21% des documents sans aucun texte extractible). Trois moteurs compares sur les memes pages, avec verite terrain relevee visuellement : moteur prose (46 phrases) tableau budgetaire couche texte existante 9/46 0/9 tesseract 5.5 local 34/46 0/9 mistral OCR 46/46 8/9 llamaparse cost_effective 46/46 9/9 Mistral OCR lisait "5 016 910 000" au lieu de "5 816 910 000" de facon reproductible sur 3 tirages — une corruption silencieuse inacceptable sur une base fiscale. LlamaParse retenu. - app/services/llama_parse_service.py : API v2, cache sha256 (une page n'est jamais payee deux fois), retry exponentiel, decoupe des fichi…29a6f4a