D Ф m i И i q ц e L Ф y e r commited on
Commit
aa4eca6
·
1 Parent(s): 4105cdc

Update: RDF import script, documentation and light requirements

Browse files
SysCRED_Documentation.md ADDED
@@ -0,0 +1,659 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # 🔬 SysCRED - Documentation Complète
2
+
3
+ ## Système Neuro-Symbolique de Vérification de Crédibilité
4
+
5
+ > **Version:** 2.0
6
+ > **Auteur:** Dominique S. Loyer
7
+ > **Citation Key:** `loyerModelingHybridSystem2025`
8
+ > **DOI:** [10.5281/zenodo.17943226](https://doi.org/10.5281/zenodo.17943226)
9
+ > **Dernière mise à jour:** Janvier 2026
10
+
11
+ ---
12
+
13
+ ## 📋 Table des Matières
14
+
15
+ 1. [Vue d'ensemble](#vue-densemble)
16
+ 2. [Architecture du système](#architecture-du-système)
17
+ 3. [Modules et fichiers](#modules-et-fichiers)
18
+ 4. [Installation et configuration](#installation-et-configuration)
19
+ 5. [Commandes et utilisation](#commandes-et-utilisation)
20
+ 6. [Choix de conception](#choix-de-conception)
21
+ 7. [Améliorations réalisées](#améliorations-réalisées)
22
+ 8. [Améliorations futures](#améliorations-futures)
23
+ 9. [API Reference](#api-reference)
24
+ 10. [Ontologie OWL](#ontologie-owl)
25
+
26
+ ---
27
+
28
+ ## Vue d'ensemble
29
+
30
+ ### Qu'est-ce que SysCRED?
31
+
32
+ SysCRED (System for CREdibility Detection) est un **système hybride neuro-symbolique** conçu pour évaluer automatiquement la crédibilité des informations en ligne. Il combine:
33
+
34
+ - **Approche symbolique** (règles explicites, transparentes et explicables)
35
+ - **Approche neuronale** (modèles NLP pour sentiment, biais, entités)
36
+ - **Ontologie OWL** (traçabilité et raisonnement sémantique)
37
+
38
+ ### Philosophie du projet
39
+
40
+ Le système est conçu comme **prototype de recherche doctorale** avec ces principes:
41
+
42
+ 1. **Explicabilité (xAI)**: Chaque décision peut être tracée et justifiée
43
+ 2. **Hybridité**: Combine le meilleur des règles et du ML
44
+ 3. **Reproductibilité**: Code open-source, documentation complète
45
+ 4. **Modularité**: Chaque composant est indépendant et testable
46
+
47
+ ---
48
+
49
+ ## Architecture du système
50
+
51
+ ```
52
+ ┌─────────────────────────────────────────────────────────────────┐
53
+ │ SysCRED v2.0 │
54
+ ├─────────────────────────────────────────────────────────────────┤
55
+ │ ┌───────────────┐ ┌───────────────┐ ┌───────────────┐ │
56
+ │ │ INPUT │ │ APIs │ │ OUTPUT │ │
57
+ │ │ URL / Texte │──│ Externes │──│ Rapport │ │
58
+ │ └───────────────┘ └───────────────┘ └───────────────┘ │
59
+ │ │ │ ▲ │
60
+ │ ▼ ▼ │ │
61
+ │ ┌─────────────────────────────────────────────────────┐ │
62
+ │ │ VERIFICATION SYSTEM │ │
63
+ │ │ ┌─────────────────┐ ┌─────────────────┐ │ │
64
+ │ │ │ RULE-BASED │ │ NLP ANALYSIS │ │ │
65
+ │ │ │ • Réputation │ │ • Sentiment │ │ │
66
+ │ │ │ • Âge domaine │ │ • NER │ │ │
67
+ │ │ │ • Fact-check │ │ • Biais │ │ │
68
+ │ │ │ • Marqueurs │ │ • Cohérence │ │ │
69
+ │ │ └─────────────────┘ └─────────────────┘ │ │
70
+ │ │ ↓ │ │
71
+ │ │ ┌─────────────────────────┐ │ │
72
+ │ │ │ SCORE CALCULATION │ │ │
73
+ │ │ │ (pondération hybride) │ │ │
74
+ │ │ └─────────────────────────┘ │ │
75
+ │ └─────────────────────────────────────────────────────┘ │
76
+ │ │ │
77
+ │ ▼ │
78
+ │ ┌─────────────────────────────────────────────────────┐ │
79
+ │ │ ONTOLOGY MANAGER (OWL/RDF) │ │
80
+ │ │ Traçabilité et raisonnement │ │
81
+ │ └─────────────────────────────────────────────────────┘ │
82
+ └─────────────────────────────────────────────────────────────────┘
83
+ ```
84
+
85
+ ### Flux de traitement
86
+
87
+ 1. **Entrée** → URL ou texte brut
88
+ 2. **Récupération** → Contenu web (si URL)
89
+ 3. **Prétraitement** → Nettoyage du texte
90
+ 4. **Données externes** → WHOIS, fact-check APIs
91
+ 5. **Analyse règles** → Marqueurs linguistiques, réputation
92
+ 6. **Analyse NLP** → Sentiment, biais, entités
93
+ 7. **Calcul score** → Pondération hybride (0-1)
94
+ 8. **Génération rapport** → JSON structuré
95
+ 9. **Sauvegarde ontologie** → Triplets RDF
96
+
97
+ ---
98
+
99
+ ## Modules et fichiers
100
+
101
+ ### Structure du projet
102
+
103
+ ```
104
+ syscred/
105
+ ├── __init__.py # Package init
106
+ ├── config.py # Configuration centralisée
107
+ ├── verification_system.py # Système principal
108
+ ├── api_clients.py # Clients APIs externes
109
+ ├── ontology_manager.py # Gestion OWL/RDF
110
+ ├── seo_analyzer.py # Analyse SEO/PageRank
111
+ ├── backend_app.py # API Flask REST
112
+ ├── eval_metrics.py # Métriques d'évaluation
113
+ ├── ir_engine.py # Moteur de recherche
114
+ ├── requirements.txt # Dépendances Python
115
+ ├── setup.py # Installation package
116
+ ├── syscred_kaggle.ipynb # Notebook Kaggle
117
+ ├── syscred_colab.ipynb # Notebook Colab (avec Drive)
118
+ └── kaggle_to_gdrive_backup.ipynb # Backup notebooks
119
+ ```
120
+
121
+ ### Description des modules
122
+
123
+ #### `config.py` - Configuration centralisée
124
+
125
+ **But:** Centraliser tous les paramètres du système dans un seul fichier.
126
+
127
+ **Classes:**
128
+
129
+ - `Config` - Configuration de base
130
+ - `DevelopmentConfig` - Pour développement local
131
+ - `ProductionConfig` - Pour production
132
+ - `TestingConfig` - Pour tests (ML désactivé)
133
+
134
+ **Paramètres clés:**
135
+
136
+ | Paramètre | Description | Valeur par défaut |
137
+ |-----------|-------------|-------------------|
138
+ | `HOST` | Adresse du serveur | `0.0.0.0` |
139
+ | `PORT` | Port du serveur | `5000` |
140
+ | `DEBUG` | Mode debug | `true` |
141
+ | `LOAD_ML_MODELS` | Charger les modèles ML | `true` |
142
+ | `WEB_FETCH_TIMEOUT` | Timeout HTTP (sec) | `10` |
143
+
144
+ **Pondérations des scores:**
145
+
146
+ ```python
147
+ SCORE_WEIGHTS = {
148
+ 'source_reputation': 0.25, # Réputation de la source
149
+ 'domain_age': 0.10, # Âge du domaine
150
+ 'sentiment_neutrality': 0.15, # Neutralité du ton
151
+ 'entity_presence': 0.15, # Présence d'entités vérifiables
152
+ 'coherence': 0.15, # Cohérence textuelle
153
+ 'fact_check': 0.20 # Résultats fact-check
154
+ }
155
+ ```
156
+
157
+ **Variables d'environnement:**
158
+
159
+ ```bash
160
+ export SYSCRED_ENV=production # Environnement (dev/prod/testing)
161
+ export SYSCRED_PORT=8080 # Port personnalisé
162
+ export SYSCRED_GOOGLE_API_KEY=xxx # Clé Google Fact Check
163
+ export SYSCRED_LOAD_ML=false # Désactiver ML
164
+ ```
165
+
166
+ ---
167
+
168
+ #### `verification_system.py` - Système principal
169
+
170
+ **But:** Pipeline principal de vérification de crédibilité.
171
+
172
+ **Classe principale:** `CredibilityVerificationSystem`
173
+
174
+ **Méthodes principales:**
175
+
176
+ | Méthode | Description |
177
+ |---------|-------------|
178
+ | `__init__()` | Initialise le système, charge les modèles |
179
+ | `verify_information(input)` | Pipeline principal de vérification |
180
+ | `rule_based_analysis(text, data)` | Analyse symbolique |
181
+ | `nlp_analysis(text)` | Analyse NLP (ML) |
182
+ | `calculate_overall_score()` | Calcule le score final |
183
+ | `generate_report()` | Génère le rapport JSON |
184
+
185
+ **Modèles ML utilisés:**
186
+
187
+ | Modèle | Usage |
188
+ |--------|-------|
189
+ | `distilbert-base-uncased-finetuned-sst-2-english` | Sentiment |
190
+ | `dbmdz/bert-large-cased-finetuned-conll03-english` | NER |
191
+ | `bert-base-uncased` | Détection de biais (placeholder) |
192
+ | `LIME` | Explication des prédictions |
193
+
194
+ ---
195
+
196
+ #### `api_clients.py` - Clients APIs externes
197
+
198
+ **But:** Abstraire toutes les interactions avec les APIs externes.
199
+
200
+ **Classe principale:** `ExternalAPIClients`
201
+
202
+ **APIs intégrées:**
203
+
204
+ | API | Méthode | Description |
205
+ |-----|---------|-------------|
206
+ | Web Content | `fetch_web_content()` | Récupère et parse le HTML |
207
+ | WHOIS | `whois_lookup()` | Âge et registrar du domaine |
208
+ | Google Fact Check | `google_fact_check()` | Vérification des faits |
209
+ | Source Reputation | `get_source_reputation()` | Base de données interne |
210
+ | CommonCrawl | `estimate_backlinks()` | Estimation backlinks |
211
+
212
+ **Data classes:**
213
+
214
+ - `WebContent` - Contenu web parsé
215
+ - `DomainInfo` - Informations WHOIS
216
+ - `FactCheckResult` - Résultat fact-check
217
+ - `ExternalData` - Données agrégées
218
+
219
+ ---
220
+
221
+ #### `ontology_manager.py` - Gestion OWL/RDF
222
+
223
+ **But:** Traçabilité sémantique avec ontologie OWL.
224
+
225
+ **Fonctionnalités:**
226
+
227
+ - Chargement d'ontologie de base (.ttl)
228
+ - Ajout de triplets RDF pour chaque évaluation
229
+ - Sauvegarde des données accumulées
230
+ - Requêtes SPARQL
231
+
232
+ **Ontologie utilisée:**
233
+
234
+ - Format: Turtle (.ttl)
235
+ - Namespace: `http://syscred.uqam.ca/ontology#`
236
+ - Concepts: `Evaluation`, `Source`, `CredibilityScore`, `Evidence`
237
+
238
+ ---
239
+
240
+ #### `backend_app.py` - API Flask
241
+
242
+ **But:** Exposer SysCRED via API REST.
243
+
244
+ **Endpoints:**
245
+
246
+ | Endpoint | Méthode | Description |
247
+ |----------|---------|-------------|
248
+ | `/api/verify` | POST | Vérification principale |
249
+ | `/api/seo` | POST | Analyse SEO uniquement |
250
+ | `/api/ontology/stats` | GET | Statistiques ontologie |
251
+ | `/api/health` | GET | Vérification santé |
252
+ | `/api/config` | GET | Configuration actuelle |
253
+
254
+ **Exemple requête:**
255
+
256
+ ```bash
257
+ curl -X POST http://localhost:5000/api/verify \
258
+ -H "Content-Type: application/json" \
259
+ -d '{"input_data": "https://example.com/article"}'
260
+ ```
261
+
262
+ ---
263
+
264
+ ## Installation et configuration
265
+
266
+ ### Prérequis
267
+
268
+ - Python 3.8+
269
+ - pip
270
+ - Git
271
+
272
+ ### Installation locale
273
+
274
+ ```bash
275
+ # Cloner le repository
276
+ git clone https://github.com/DominiqueLoyer/syscred.git
277
+ cd syscred
278
+
279
+ # Créer environnement virtuel
280
+ python -m venv venv
281
+ source venv/bin/activate # Linux/Mac
282
+ # ou: venv\Scripts\activate # Windows
283
+
284
+ # Installer les dépendances
285
+ pip install -r requirements.txt
286
+
287
+ # Installer le package en mode développement
288
+ pip install -e .
289
+ ```
290
+
291
+ ### Installation des dépendances
292
+
293
+ ```bash
294
+ # Dépendances principales
295
+ pip install transformers torch numpy
296
+ pip install flask flask-cors
297
+ pip install rdflib owlrl
298
+ pip install requests beautifulsoup4
299
+
300
+ # Dépendances optionnelles
301
+ pip install python-whois # Pour WHOIS
302
+ pip install lime # Pour explications ML
303
+ ```
304
+
305
+ ### Fichier requirements.txt
306
+
307
+ ```
308
+ transformers>=4.30.0
309
+ torch>=2.0.0
310
+ numpy>=1.24.0
311
+ flask>=2.3.0
312
+ flask-cors>=4.0.0
313
+ rdflib>=6.3.0
314
+ owlrl>=6.0.0
315
+ requests>=2.31.0
316
+ beautifulsoup4>=4.12.0
317
+ python-whois>=0.8.0
318
+ lime>=0.2.0
319
+ ```
320
+
321
+ ---
322
+
323
+ ## Commandes et utilisation
324
+
325
+ ### Démarrer l'API Flask
326
+
327
+ ```bash
328
+ # Mode développement
329
+ cd /path/to/syscred
330
+ python backend_app.py
331
+
332
+ # Avec variables d'environnement
333
+ SYSCRED_PORT=8080 SYSCRED_DEBUG=true python backend_app.py
334
+
335
+ # Mode production
336
+ SYSCRED_ENV=production python backend_app.py
337
+ ```
338
+
339
+ ### Tester le système en ligne de commande
340
+
341
+ ```bash
342
+ # Test direct du module
343
+ python -m syscred.verification_system
344
+
345
+ # Test avec entrée personnalisée
346
+ python -c "
347
+ from syscred.verification_system import CredibilityVerificationSystem
348
+ sys = CredibilityVerificationSystem(load_ml_models=False)
349
+ result = sys.verify_information('https://www.lemonde.fr')
350
+ print(result['scoreCredibilite'])
351
+ "
352
+ ```
353
+
354
+ ### Utilisation dans Kaggle/Colab
355
+
356
+ Ouvrez le notebook `syscred_kaggle.ipynb` ou `syscred_colab.ipynb`:
357
+
358
+ ```python
359
+ # Cellule 1: Installation
360
+ !pip install transformers torch rdflib requests beautifulsoup4
361
+
362
+ # Cellule 2: Importer et tester
363
+ from syscred import CredibilityVerificationSystem
364
+ sys = CredibilityVerificationSystem()
365
+ result = sys.verify_information("https://example.com")
366
+ ```
367
+
368
+ ### API REST - Exemples
369
+
370
+ ```bash
371
+ # Vérifier une URL
372
+ curl -X POST http://localhost:5000/api/verify \
373
+ -H "Content-Type: application/json" \
374
+ -d '{"input_data": "https://www.bbc.com/article"}'
375
+
376
+ # Vérifier du texte
377
+ curl -X POST http://localhost:5000/api/verify \
378
+ -H "Content-Type: application/json" \
379
+ -d '{"input_data": "This is a verified news report."}'
380
+
381
+ # Vérifier la santé
382
+ curl http://localhost:5000/api/health
383
+
384
+ # Obtenir la configuration
385
+ curl http://localhost:5000/api/config
386
+ ```
387
+
388
+ ---
389
+
390
+ ## Choix de conception
391
+
392
+ ### Pourquoi approche hybride neuro-symbolique?
393
+
394
+ | Approche | Forces | Faiblesses |
395
+ |----------|--------|------------|
396
+ | **Règles** | Transparent, explicable, rapide | Rigide, couverture limitée |
397
+ | **ML/NLP** | Flexible, patterns complexes | Boîte noire, besoin données |
398
+ | **Hybride** | Combine les deux! | Plus complexe |
399
+
400
+ **Décision:** Utiliser les règles pour les cas clairs (réputation connue, marqueurs linguistiques) et le ML pour les nuances (sentiment, biais).
401
+
402
+ ### Pourquoi ces pondérations?
403
+
404
+ Les poids par défaut reflètent l'importance relative de chaque facteur selon la littérature:
405
+
406
+ ```python
407
+ SCORE_WEIGHTS = {
408
+ 'source_reputation': 0.25, # Le plus important: source connue
409
+ 'fact_check': 0.20, # Vérification externe
410
+ 'sentiment_neutrality': 0.15,
411
+ 'entity_presence': 0.15,
412
+ 'coherence': 0.15,
413
+ 'domain_age': 0.10 # Moins important seul
414
+ }
415
+ ```
416
+
417
+ ### Pourquoi LIME pour l'explicabilité?
418
+
419
+ - **Local Interpretable Model-agnostic Explanations**
420
+ - Fonctionne avec n'importe quel modèle
421
+ - Génère des explications compréhensibles
422
+ - Standard académique reconnu
423
+
424
+ ### Pourquoi OWL/RDF?
425
+
426
+ - **Traçabilité**: Chaque évaluation est enregistrée
427
+ - **Raisonnement**: Inférences automatiques possibles (OWL-RL)
428
+ - **Interopérabilité**: Standard W3C, compatible SPARQL
429
+ - **Publication**: Données linked data
430
+
431
+ ---
432
+
433
+ ## Améliorations réalisées
434
+
435
+ ### Version 2.0 (Janvier 2026)
436
+
437
+ 1. **Configuration centralisée** (`config.py`)
438
+ - Variables d'environnement
439
+ - Profils dev/prod/testing
440
+ - Pondérations configurables
441
+
442
+ 2. **API Clients refactorisés** (`api_clients.py`)
443
+ - Data classes typées
444
+ - Gestion d'erreurs robuste
445
+ - WHOIS lookup réel
446
+
447
+ 3. **Notebooks Kaggle/Colab**
448
+ - `syscred_kaggle.ipynb` - Version Kaggle
449
+ - `syscred_colab.ipynb` - Version avec Google Drive
450
+ - Badges "Open in" pour facilité
451
+
452
+ 4. **Fix du bug `NameError: result`**
453
+ - Variable locale dans section RDF
454
+ - Fallback si aucun résultat
455
+
456
+ 5. **README professionnel**
457
+ - Badge DOI Zenodo
458
+ - Quick start
459
+ - API endpoints documentés
460
+
461
+ 6. **Notebook backup Kaggle→Drive**
462
+ - `kaggle_to_gdrive_backup.ipynb`
463
+ - Sauvegarde automatique
464
+
465
+ ---
466
+
467
+ ## Améliorations futures
468
+
469
+ ### Court terme (Prochains mois)
470
+
471
+ - [ ] **Google Fact Check API réel** - Intégrer la clé API
472
+ - [ ] **CommonCrawl backlinks** - Analyse réelle des backlinks
473
+ - [ ] **Plus de sources** - Étendre `SOURCE_REPUTATIONS`
474
+ - [ ] **Tests unitaires** - Couverture >80%
475
+
476
+ ### Moyen terme (6-12 mois)
477
+
478
+ - [ ] **Modèle de biais fine-tuné** - Entraîner sur donées réelles
479
+ - [ ] **Cache Redis** - Mise en cache des résultats
480
+ - [ ] **Interface web moderne** - React/Vue frontend
481
+ - [ ] **Docker** - Conteneurisation
482
+
483
+ ### Long terme (Thèse)
484
+
485
+ - [ ] **Évaluation formelle** - Dataset de benchmark
486
+ - [ ] **Multi-langue** - Support français natif
487
+ - [ ] **Graphe de connaissances** - Neo4j intégration
488
+ - [ ] **Apprentissage continu** - Feedback loop
489
+
490
+ ---
491
+
492
+ ## API Reference
493
+
494
+ ### Classe `CredibilityVerificationSystem`
495
+
496
+ ```python
497
+ class CredibilityVerificationSystem:
498
+ def __init__(
499
+ self,
500
+ google_api_key: Optional[str] = None,
501
+ ontology_base_path: Optional[str] = None,
502
+ ontology_data_path: Optional[str] = None,
503
+ load_ml_models: bool = True
504
+ ):
505
+ """
506
+ Initialize the credibility verification system.
507
+
508
+ Args:
509
+ google_api_key: API key for Google Fact Check
510
+ ontology_base_path: Path to base ontology TTL
511
+ ontology_data_path: Path to store data
512
+ load_ml_models: Whether to load ML models
513
+ """
514
+
515
+ def verify_information(self, input_data: str) -> Dict[str, Any]:
516
+ """
517
+ Main pipeline to verify credibility.
518
+
519
+ Args:
520
+ input_data: URL or text to verify
521
+
522
+ Returns:
523
+ Complete evaluation report with:
524
+ - idRapport: Unique report ID
525
+ - scoreCredibilite: 0.0-1.0
526
+ - resumeAnalyse: French summary
527
+ - detailsScore: Score breakdown
528
+ - reglesAppliquees: Rule-based results
529
+ - analyseNLP: NLP analysis results
530
+ """
531
+ ```
532
+
533
+ ### Classe `Config`
534
+
535
+ ```python
536
+ class Config:
537
+ # Chemins
538
+ BASE_DIR: Path
539
+ ONTOLOGY_BASE_PATH: Path
540
+ ONTOLOGY_DATA_PATH: Path
541
+
542
+ # Serveur
543
+ HOST: str = "0.0.0.0"
544
+ PORT: int = 5000
545
+ DEBUG: bool = True
546
+
547
+ # API Keys
548
+ GOOGLE_FACT_CHECK_API_KEY: Optional[str]
549
+
550
+ # Modèles ML
551
+ LOAD_ML_MODELS: bool = True
552
+ SENTIMENT_MODEL: str
553
+ NER_MODEL: str
554
+
555
+ # Pondérations
556
+ SCORE_WEIGHTS: Dict[str, float]
557
+ CREDIBILITY_THRESHOLDS: Dict[str, float]
558
+ SOURCE_REPUTATIONS: Dict[str, str]
559
+
560
+ @classmethod
561
+ def load_external_reputations(cls, filepath: str) -> None:
562
+ """Charger réputations depuis fichier JSON."""
563
+
564
+ @classmethod
565
+ def update_weights(cls, new_weights: Dict[str, float]) -> None:
566
+ """Mettre à jour les pondérations."""
567
+
568
+ @classmethod
569
+ def to_dict(cls) -> Dict:
570
+ """Exporter configuration en dictionnaire."""
571
+ ```
572
+
573
+ ---
574
+
575
+ ## Ontologie OWL
576
+
577
+ ### Structure conceptuelle
578
+
579
+ ```
580
+ syscred:Evaluation
581
+ └── syscred:evaluates → syscred:Information
582
+ └── syscred:hasScore → xsd:float
583
+ └── syscred:hasEvidence → syscred:Evidence
584
+ └── syscred:generatedAt → xsd:dateTime
585
+
586
+ syscred:Information
587
+ └── syscred:hasSource → syscred:Source
588
+ └── syscred:hasContent → xsd:string
589
+
590
+ syscred:Source
591
+ └── syscred:hasDomain → xsd:string
592
+ └── syscred:hasReputation → syscred:ReputationLevel
593
+ └── syscred:hasDomainAge → xsd:integer
594
+
595
+ syscred:Evidence
596
+ └── syscred:type → xsd:string (Linguistic, FactCheck, etc.)
597
+ └── syscred:value → xsd:string
598
+ └── syscred:impact → xsd:float
599
+ ```
600
+
601
+ ### Exemple de triplets générés
602
+
603
+ ```turtle
604
+ @prefix syscred: <http://syscred.uqam.ca/ontology#> .
605
+ @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
606
+
607
+ syscred:eval_1705890000 a syscred:Evaluation ;
608
+ syscred:evaluates syscred:info_lemonde_article ;
609
+ syscred:hasScore "0.85"^^xsd:float ;
610
+ syscred:generatedAt "2026-01-21T13:40:00"^^xsd:dateTime ;
611
+ syscred:hasEvidence syscred:evidence_1 .
612
+
613
+ syscred:evidence_1 a syscred:Evidence ;
614
+ syscred:type "SourceReputation" ;
615
+ syscred:value "High" ;
616
+ syscred:impact "0.25"^^xsd:float .
617
+ ```
618
+
619
+ ---
620
+
621
+ ## Scripts utilitaires
622
+
623
+ ### Script de backup vers Obsidian/Notion
624
+
625
+ Créez ce script dans `/Users/bk280625/documents041025/MonCode/`:
626
+
627
+ ```bash
628
+ #!/bin/bash
629
+ # save_syscred_docs.sh
630
+ # Usage: ./save_syscred_docs.sh
631
+
632
+ DOC_SOURCE="/Users/bk280625/documents041025/MonCode/syscred/SysCRED_Documentation.md"
633
+ OBSIDIAN_VAULT="/Users/bk280625/Documents/Obsidian/PhD"
634
+ DATE=$(date +%Y%m%d)
635
+
636
+ # Copier vers Obsidian
637
+ cp "$DOC_SOURCE" "$OBSIDIAN_VAULT/SysCRED_Documentation_$DATE.md"
638
+ echo "✅ Copié vers Obsidian: $OBSIDIAN_VAULT"
639
+
640
+ # Ouvrir dans Obsidian (Mac)
641
+ open "obsidian://open?vault=PhD&file=SysCRED_Documentation_$DATE"
642
+
643
+ # Pour Notion: utiliser l'API ou copier manuellement
644
+ # Notion n'a pas d'import direct de fichiers locaux
645
+ echo "📋 Pour Notion: Copiez le contenu de $DOC_SOURCE"
646
+ echo " Ou utilisez: https://notion.so/import"
647
+ ```
648
+
649
+ ---
650
+
651
+ ## Références
652
+
653
+ - Loyer, D. S. (2025). *Modeling and Hybrid System for Verification of Sources Credibility*. UQAM.
654
+ - Loyer, D. S. (2025). *Ontology of a Verification System for Liability of the Information*. DIC-9335.
655
+
656
+ ---
657
+
658
+ *Documentation générée le 21 janvier 2026*
659
+ *SysCRED v2.0 - Dominique S. Loyer - UQAM*
import_rdf_to_supabase.py CHANGED
@@ -6,9 +6,14 @@ import requests
6
  from rdflib import Graph, Literal, URIRef, Namespace
7
  from pathlib import Path
8
 
9
- SUPABASE_URL = "https://zmluirvqfkmfazqitqgi.supabase.co"
10
- # Use service role key for insert operations
11
- SUPABASE_KEY = "sb_secret_2CWvKTeiJ-gbQn5AGCI8YQ_vOujwVnt"
 
 
 
 
 
12
 
13
  headers = {
14
  'apikey': SUPABASE_KEY,
 
6
  from rdflib import Graph, Literal, URIRef, Namespace
7
  from pathlib import Path
8
 
9
+ # APRÈS (sécurisé)
10
+ import os
11
+ from dotenv import load_dotenv
12
+ load_dotenv()
13
+
14
+ SUPABASE_URL = os.environ.get("SUPABASE_URL")
15
+ SUPABASE_KEY = os.environ.get("SUPABASE_SECRET_KEY")
16
+
17
 
18
  headers = {
19
  'apikey': SUPABASE_KEY,
requirements-light.txt ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # SysCRED - Requirements LIGHT (sans ML local)
2
+ # Pour Render (512MB) et test local sans PyTorch
3
+
4
+ # === Core Dependencies ===
5
+ requests>=2.28.0
6
+ beautifulsoup4>=4.11.0
7
+ python-whois>=0.8.0
8
+ lxml>=4.9.0
9
+
10
+ # === RDF/Ontology ===
11
+ rdflib>=6.0.0
12
+
13
+ # === Web Backend ===
14
+ flask>=2.3.0
15
+ flask-cors>=4.0.0
16
+ python-dotenv>=1.0.0
17
+ pandas>=2.0.0
18
+
19
+ # === Production/Database ===
20
+ gunicorn>=20.1.0
21
+ psycopg2-binary>=2.9.0
22
+ flask-sqlalchemy>=3.0.0
23
+
24
+ # === Development/Testing ===
25
+ pytest>=7.0.0