feat: Add data quality verification & cleanup scripts
## Data Quality & Cleanup (Priorities 1-6) Added comprehensive data quality verification and cleanup system: **Scripts créés**: - verify_data_quality.py: Analyse qualité complète œuvre par œuvre - clean_duplicate_documents.py: Nettoyage doublons Documents - populate_work_collection.py/clean.py: Peuplement Work collection - fix_chunks_count.py: Correction chunksCount incohérents - manage_orphan_chunks.py: Gestion chunks orphelins (3 options) - clean_orphan_works.py: Suppression Works sans chunks - add_missing_work.py: Création Work manquant - generate_schema_stats.py: Génération stats auto - migrate_add_work_collection.py: Migration sûre Work collection **Documentation**: - WEAVIATE_GUIDE_COMPLET.md: Guide consolidé complet (600+ lignes) - WEAVIATE_SCHEMA.md: Référence schéma rapide - NETTOYAGE_COMPLETE_RAPPORT.md: Rapport nettoyage session - ANALYSE_QUALITE_DONNEES.md: Analyse qualité initiale - rapport_qualite_donnees.txt: Output brut vérification **Résultats nettoyage**: - Documents: 16 → 9 (7 doublons supprimés) - Works: 0 → 9 (peuplé + nettoyé) - Chunks: 5,404 → 5,230 (174 orphelins supprimés) - chunksCount: Corrigés (231 → 5,230 déclaré = réel) - Cohérence parfaite: 9 Works = 9 Documents = 9 œuvres **Modifications code**: - schema.py: Ajout Work collection avec vectorisation - utils/weaviate_ingest.py: Support Work ingestion - utils/word_pipeline.py: Désactivation concepts (problème .lower()) - utils/word_toc_extractor.py: Métadonnées Word correctes - .gitignore: Exclusion fichiers temporaires (*.wav, output/*, NUL) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
56
generations/library_rag/situation.md
Normal file
56
generations/library_rag/situation.md
Normal file
@@ -0,0 +1,56 @@
|
||||
✅ CE QUI A ÉTÉ FAIT
|
||||
|
||||
1. TOC extraction - CORRIGÉE
|
||||
- Fichier modifié : utils/word_toc_extractor.py
|
||||
- Ajout de 2 fonctions :
|
||||
- _roman_to_int() : Convertit chiffres romains (I, II, VII) en entiers
|
||||
- extract_toc_from_chapter_summaries() : Extrait TOC depuis "RESUME DES CHAPITRES"
|
||||
- Résultat : 7 chapitres correctement extraits (au lieu de 2)
|
||||
2. Weaviate - Investigation complète
|
||||
- Total chunks dans Weaviate : 5433 chunks (5068 de Peirce)
|
||||
- "On the origin - 10 pages" : 38 chunks supprimés (tous avaient sectionPath=1)
|
||||
3. Documentation créée
|
||||
- Fichier : WEAVIATE_SCHEMA.md (schéma complet de la base)
|
||||
|
||||
🚨 PROBLÈME BLOQUANT
|
||||
|
||||
text2vec-transformers tué par le système (OOM - Out Of Memory)
|
||||
|
||||
Symptômes :
|
||||
Killed
|
||||
INFO: Started server process
|
||||
INFO: Application startup complete
|
||||
Killed
|
||||
|
||||
Le conteneur Docker n'a pas assez de RAM pour vectoriser les chunks → ingestion échoue avec 0/7 chunks insérés.
|
||||
|
||||
📋 CE QUI RESTE À FAIRE (après redémarrage)
|
||||
|
||||
Option A - Simple (recommandée) :
|
||||
1. Modifier word_pipeline.py ligne 356-387 pour que le simple text splitting utilise la TOC
|
||||
2. Re-traiter avec use_llm=False (pas besoin de vectorisation intensive)
|
||||
3. Vérifier que les chunks ont les bons sectionPath (1, 2, 3... 7)
|
||||
|
||||
Option B - Complexe :
|
||||
1. Augmenter RAM allouée à Docker (Settings → Resources)
|
||||
2. Redémarrer Docker
|
||||
3. Re-traiter avec use_llm=True et llm_provider='mistral'
|
||||
|
||||
📂 FICHIERS MODIFIÉS
|
||||
|
||||
- utils/word_toc_extractor.py (nouvelles fonctions TOC)
|
||||
- utils/word_pipeline.py (utilise nouvelle fonction TOC)
|
||||
- WEAVIATE_SCHEMA.md (nouveau fichier de documentation)
|
||||
|
||||
🔧 COMMANDES APRÈS REDÉMARRAGE
|
||||
|
||||
cd C:\GitHub\linear_coding_library_rag\generations\library_rag
|
||||
|
||||
# Vérifier Docker
|
||||
docker ps
|
||||
|
||||
# Option A (simple) - modifier le code puis :
|
||||
python -c "from pathlib import Path; from utils.word_pipeline import process_word; process_word(Path('input/On the origin - 10 pages.docx'), use_llm=False, ingest_to_weaviate=True)"
|
||||
|
||||
# Vérifier résultat
|
||||
python -c "import weaviate; client=weaviate.connect_to_local(); coll=client.collections.get('Chunk'); resp=coll.query.fetch_objects(limit=100); origin=[o for o in resp.objects if 'origin - 10' in o.properties.get('work',{}).get('title','').lower()]; print(f'{len(origin)} chunks'); client.close()"
|
||||
Reference in New Issue
Block a user