## 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>
7.8 KiB
Analyse de la qualité des données Weaviate
Date : 01/01/2026
Script : verify_data_quality.py
Rapport complet : rapport_qualite_donnees.txt
Résumé exécutif
Vous aviez raison : il y a des incohérences majeures dans les données.
Problème principal : Les 16 "documents" dans la collection Document sont en réalité des doublons de seulement 9 œuvres distinctes. Les chunks et summaries sont bien créés, mais pointent vers des documents dupliqués.
Statistiques globales
| Collection | Objets | Note |
|---|---|---|
| Work | 0 | ❌ Vide (devrait contenir 9 œuvres) |
| Document | 16 | ⚠️ Contient des doublons (9 œuvres réelles) |
| Chunk | 5,404 | ✅ OK |
| Summary | 8,425 | ✅ OK |
Œuvres uniques détectées : 9 (via nested objects dans Chunks)
Problèmes détectés
1. Documents dupliqués (CRITIQUE)
Les 16 documents contiennent des doublons :
| Document sourceId | Occurrences | Chunks associés |
|---|---|---|
peirce_collected_papers_fixed |
4 fois | 5,068 chunks (tous les 4 pointent vers les mêmes chunks) |
tiercelin_la-pensee-signe |
3 fois | 36 chunks (tous les 3 pointent vers les mêmes chunks) |
Haugeland_J._Mind_Design_III... |
3 fois | 50 chunks (tous les 3 pointent vers les mêmes chunks) |
| Autres documents | 1 fois chacun | Nombre variable |
Impact :
- La collection Document contient 16 objets au lieu de 9
- Les chunks pointent correctement vers les sourceId (pas de problème de côté Chunk)
- Mais vous avez des entrées Document redondantes
Cause probable :
- Ingestions multiples du même document (tests, ré-ingestions)
- Le script d'ingestion n'a pas vérifié les doublons avant insertion dans Document
2. Collection Work vide (BLOQUANT)
- 0 objets dans la collection Work
- 9 œuvres uniques détectées dans les nested objects des chunks
Œuvres détectées :
- Mind Design III (John Haugeland et al.)
- La pensée-signe (Claudine Tiercelin)
- Collected papers (Charles Sanders Peirce)
- La logique de la science (Charles Sanders Peirce)
- The Fixation of Belief (C. S. Peirce)
- AI: The Very Idea (John Haugeland)
- Between Past and Future (Hannah Arendt)
- On a New List of Categories (Charles Sanders Peirce)
- Platon - Ménon (Platon)
Recommandation :
python migrate_add_work_collection.py # Crée la collection Work avec vectorisation
# Ensuite : script pour extraire les 9 œuvres uniques et les insérer dans Work
3. Incohérence Document.chunksCount (MAJEUR)
| Métrique | Valeur |
|---|---|
Total déclaré (Document.chunksCount) |
731 |
| Chunks réels dans collection Chunk | 5,404 |
| Différence | 4,673 chunks non comptabilisés |
Cause :
- Le champ
chunksCountn'a pas été mis à jour lors des ingestions suivantes - Ou les chunks ont été créés sans mettre à jour le document parent
Impact :
- Les statistiques affichées dans l'UI seront fausses
- Impossible de se fier à
chunksCountpour savoir combien de chunks un document possède
Solution :
- Script de réparation pour recalculer et mettre à jour tous les
chunksCount - Ou accepter que ce champ soit obsolète et le recalculer à la volée
4. Summaries manquants (MOYEN)
5 documents n'ont AUCUN summary (ratio 0.00) :
The_fixation_of_beliefs(1 chunk, 0 summaries)AI-TheVery-Idea-Haugeland-1986(1 chunk, 0 summaries)Arendt_Hannah_-_Between_Past_and_Future_Viking_1968(9 chunks, 0 summaries)On_a_New_List_of_Categories(3 chunks, 0 summaries)
3 documents ont un ratio < 0.5 (peu de summaries) :
tiercelin_la-pensee-signe: 0.42 (36 chunks, 15 summaries)Platon_-_Menon_trad._Cousin: 0.22 (50 chunks, 11 summaries)
Cause probable :
- Documents courts ou sans structure hiérarchique claire
- Problème lors de la génération des summaries (étape 9 du pipeline)
- Ou summaries intentionnellement non créés pour certains types de documents
Analyse par œuvre
✅ Données cohérentes
peirce_collected_papers_fixed (5,068 chunks, 8,313 summaries) :
- Ratio Summary/Chunk : 1.64
- Nested objects cohérents ✅
- Work manquant dans collection Work ❌
⚠️ Problèmes mineurs
tiercelin_la-pensee-signe (36 chunks, 15 summaries) :
- Ratio faible : 0.42 (peu de summaries)
- Dupliqué 3 fois dans Document
Platon - Ménon (50 chunks, 11 summaries) :
- Ratio très faible : 0.22 (peu de summaries)
- Peut-être structure hiérarchique non détectée
⚠️ Documents courts sans summaries
The_fixation_of_beliefs, AI-TheVery-Idea, On_a_New_List_of_Categories, Arendt_Hannah :
- 1 à 9 chunks seulement
- 0 summaries
- Peut-être trop courts pour avoir des chapitres/sections
Recommandations d'action
Priorité 1 : Nettoyer les doublons Document
Problème : 16 documents au lieu de 9 (7 doublons)
Solution :
- Créer un script
clean_duplicate_documents.py - Pour chaque sourceId, garder un seul objet Document (le plus récent)
- Supprimer les doublons
- Recalculer les
chunksCountpour les documents restants
Impact : Réduction de 16 → 9 documents
Priorité 2 : Peupler la collection Work
Problème : Collection Work vide (0 objets)
Solution :
- Exécuter
migrate_add_work_collection.py(ajoute vectorisation) - Créer un script
populate_work_collection.py:- Extraire les 9 œuvres uniques depuis les nested objects des chunks
- Insérer dans la collection Work
- Optionnel : lier les documents aux Works via cross-reference
Impact : Collection Work peuplée avec 9 œuvres
Priorité 3 : Recalculer Document.chunksCount
Problème : Incohérence de 4,673 chunks (731 déclaré vs 5,404 réel)
Solution :
- Créer un script
fix_chunks_count.py - Pour chaque document :
- Compter les chunks réels (via filtrage Python comme dans verify_data_quality.py)
- Mettre à jour le champ
chunksCount
Impact : Métadonnées correctes pour statistiques UI
Priorité 4 (optionnelle) : Regénérer summaries manquants
Problème : 5 documents sans summaries, 3 avec ratio < 0.5
Solution :
- Analyser si c'est intentionnel (documents courts)
- Ou ré-exécuter l'étape de génération de summaries (étape 9 du pipeline)
- Peut nécessiter ajustement des seuils (ex: nombre minimum de chunks pour créer summary)
Impact : Meilleure recherche hiérarchique
Scripts à créer
clean_duplicate_documents.py- Nettoyer doublons (Priorité 1)populate_work_collection.py- Peupler Work depuis nested objects (Priorité 2)fix_chunks_count.py- Recalculer chunksCount (Priorité 3)regenerate_summaries.py- Optionnel (Priorité 4)
Conclusion
Vos suspicions étaient correctes : les œuvres ne se retrouvent pas dans les 4 collections de manière cohérente.
Problèmes principaux :
- ❌ Work collection vide (0 au lieu de 9)
- ⚠️ Documents dupliqués (16 au lieu de 9)
- ⚠️ chunksCount obsolète (4,673 chunks non comptabilisés)
- ⚠️ Summaries manquants pour certains documents
Bonne nouvelle :
- ✅ Les chunks et summaries sont bien créés et cohérents
- ✅ Les nested objects sont cohérents (pas de conflits title/author)
- ✅ Pas de données orphelines (tous les chunks/summaries ont un document parent)
Next steps :
- Décider quelle priorité nettoyer en premier
- Je peux créer les scripts de nettoyage si vous le souhaitez
- Ou vous pouvez les créer vous-même en vous inspirant de
verify_data_quality.py
Fichiers générés :
verify_data_quality.py- Script de vérificationrapport_qualite_donnees.txt- Rapport complet détailléANALYSE_QUALITE_DONNEES.md- Ce document (résumé)