Scrap-Dji / PROJECT_ANALYSIS.md
joel
Initial deployment: Scrap-Dji with API
dfdddb1

Analyse Détaillée du Projet Scrap-Dji

1. Vue d'ensemble de l'Architecture

Le projet Scrap-Dji est une plateforme modulaire conçue pour la collecte, le traitement et l'indexation de contenus panafricains. L'architecture suit une approche pipeline classique :

  1. Collecte (/scraper) : Utilise divers outils (Scrapy, Newspaper3k, Snscrape, Selenium) pour extraire des données brutes de sites web, réseaux sociaux et documents.
  2. Traitement (/parser) : Nettoyage HTML, dédoublonnage par hashage, et structuration des données.
  3. Stockage (/db & /storage) : Hybride entre relationnel (PostgreSQL pour la structure) et NoSQL (MongoDB pour la flexibilité).
  4. Indexation (/indexer) : Double indexation pour la recherche textuelle (Typesense/Meilisearch) et sémantique (Qdrant).
  5. Exposition (/api & /frontend) : API FastAPI et une interface de recherche minimaliste.

2. Réponses à vos Questions Spécifiques

🧠 Que peut-on faire concrètement avec les données ?

Une fois les données scrapées, les possibilités sont vastes :

  • Moteur de recherche souverain : Créer un portail de recherche spécialisé sur les thématiques africaines.
  • Analyse de tendances (OSINT) : Suivre les sujets brûlants sur les réseaux sociaux et dans la presse de différents pays africains.
  • Entraînement d'IA : Utiliser les textes pour fine-tuner des modèles de langage (LLM) sur des contextes ou langues africaines.
  • Veille médiatique : Automatiser la surveillance de sources spécifiques pour des rapports quotidiens.

📊 Quelles sont les données récupérées ?

D'après les modèles (db/models.py), le projet capture :

  • Identifiants : UUID unique pour chaque document.
  • Contenu : Titre, texte intégral, langue, tags.
  • Métadonnées : Auteur, pays d'origine, date de publication, type de document (article, social, PDF, image).
  • Source : URL d'origine (essentiel pour la traçabilité).
  • Relations : Liens vers des versions antérieures du texte (historisation) et chemins vers les images téléchargées.

🔄 Reprise du scraping et doublons

Oui, le script gère la reprise sans répétition. Dans scraper/main.py (ligne 108), la méthode save_document vérifie si l'URL existe déjà en base (source_url).

  • Si l'URL existe : il crée une nouvelle version du texte (DocumentVersion) mais ne recrée pas le document principal.
  • Pour Mongo, Typesense et Qdrant, le code utilise des opérations upsert (mise à jour si existe, sinon insertion), ce qui garantit l'absence de doublons identiques.

💻 Configuration sans installation locale (Windows)

Comme vous n'avez pas Mongo/Typesense/Qdrant installé, voici les alternatives :

  1. Docker (Recommandé) : C'est le plus simple. Installez Docker Desktop et utilisez un fichier docker-compose.yml pour lancer tous les services en une commande.
  2. Cloud (Gratuit/Freemium) :
  3. Désactivation temporaire : Vous pouvez modifier scraper/main.py pour commenter les appels aux indexeurs que vous ne possédez pas encore.

⚡ Ressources et Performance

Le scraper sera-t-il gourmand ?

  • CPU/RAM : Le scraping de base est léger. Par contre, si vous utilisez Selenium pour des sites dynamiques ou SpaCy pour l'enrichissement NLP, la consommation grimpera significativement.
  • Réseau : Dépend de SCRAPER_CONCURRENT_REQUESTS (actuellement 16). 16 requêtes simultanées est raisonnable pour une connexion standard.
  • Stockage : Prévoyez de l'espace si vous téléchargez beaucoup d'images.

3. Configuration Git recommandée

Pour éviter de commiter vos secrets et votre environnement, assurez-vous que votre .gitignore contient :

# Environnement virtuel
venv/
.venv/
env/

# Secrets et config
.env
sources.json

# Données locales
storage_data/
logs/
data/
temp/
datasets/
db/*.sqlite

# Python
__pycache__/
*.py[cod]
*$py.class

4. Analyse de l'état actuel (Détails)

  • Force : Architecture très propre et modulaire. Le choix d'une double base (Postgres/Mongo) et d'un double moteur de recherche est très pro.
  • Points à améliorer :
    • L'API (api/main.py) est encore vide (ne fait pas de vraie recherche).
    • Le frontend est ultra-basique (uniquement JSON brut).
    • Le mode dry-run (test sans sauvegarde) n'est pas encore implémenté.