/outils_traitement_corpus

Scrapping du site Threads by Meta pour faire une analyse de sentiment sur des commentaires. Projet pour le cours d'outils et traitement de corpus.

Primary LanguageJupyter Notebook

Sommaire

Outils Traitement Corpus

Le projet que je veux réaliser

J'aimerais bien me lancer dans un projet d'analyse de sentiments car ça m'intéresse beaucoup et j'ai envie de comprendre mieux comment ça fonctionne.

image

Gestion du dépôt git

J'ai décidé de mettre sur le git le fichier de la dataset de Kaggle parce que ce dépôt git est plus qu'un projet en cours, c'est aussi un dépôt sur lequel je veux revenir souvent et améliorer au fur et à mesure en apprenant de nouvelles choses plus tard.

J'ai donc des fichiers qui sont pour mon enrichissement personnel, des fichiers tests qui ne sont pas utiles pour le cours et j'ai décidé de les garder sur le git mais de les mettre dans mon .gitignore temporairement pour la correction.

Le dataset que j'ai choisi

J'ai trouvé un dataset sur Kaggle qui correspond totalement à mon projet ! Le dataset se nomme Emotions et permet d'analyser de courts messages postés en ligne selon 6 types d'émotions :

  • tristesse (0)
  • joie (1)
  • amour (2)
  • colère (3)
  • peur (4)
  • surprise (5)

Ces émotions sont classées de 0 à 5 selon l'émotion primaire qui ressort du message.

Comment ont été collectées les données ?

Les données ici ont été récoltées sur Twitter, le réseau social très populaire. Il y a 416 808 phrases au total et elles ont toutes la même forme : "I [VERB] [..]". Voici un exemple du début du document que j'ai pu télécharger sur Kaggle.

image

À quoi peut servir ce corpus ?

  • Analyse de sentiment
  • Classification des émotions
  • Analyse textuelle

À quel modèle a-t-il servi ?

J'ai pu voir que ce dataset a été réutilisée par 39 autres personnes, c'est aussi l'un des plus populaire de ce site. Ces notebooks vont m'être très utiles par la suite. Je crois que c'est un dataset assez récent car il a été modifié pour la dernière fois il y a 2 mois, donc il n'y a pas encore beaucoup de modèles qui ont pu l'utiliser.

Exemple

Voici un exemple de comment ça fonctionne.

image

On voit bien qu'il y a le message sous forme de chaînes de caractères et la classification de l'émotion sous forme de chiffre de 0 à 5 comme on l'avait vu au-dessus.

À moi de jouer !

Threads n’a pas d’API publique, donc j’ai décidé d’utiliser PlayWright pour parser le site. Comme je ne pouvais pas l'utiliser dans mon Jupyter Notebook, je suis passée sur un fichier python classique.

Un problème s’est alors posé devant moi : quels commentaires je prends ? Comme je ne peux pas parser tout le site sans le faire planter ou me faire bannir, je dois fixer des limites.

Extraction des données

J'ai voulu prendre des données en français mais je n'ai pas réussi. J'ai tenté de récolter les commentaires avec l'attribut lang dans la balise html lang="fr" dans le code source, mais le site ne possède que la balise lang="en", même lorsque c'est en français.

Nettoyage des données

Pour pouvoir exploiter les données correctement, il va falloir commencer le nettoyage des données. En lançant le script qui récupère les threads, je vais tout d'abord repérer les choses qu'il va falloir nettoyer ci-dessous :

  • tout mettre en minuscule
  •  supprimer toute forme de ponctuation
    • et les $ ?
    •  les nombres aussi ?
  •  enlever les URLs
    • enlever aussi celles sans le https (instagram.com/p/c6-qrpgsm0h/)
  • vérifier la langue (prendre que le français)
  •  enlever les hastags (mais garder le texte ? -> oui)
  • supprimer les \n
  •  corriger les chaînes de caractères vides
    •  corriger les chaînes sans mots (par exemple : " ... ")
  • enlever les mentions (qui commencent par un @)
  • ne prendre que les phrases de 3 mots ou plus (pour que l'analyse soit plus juste)

Transformers DistilCamemBERT

J'ai utilisé le modèle DistilCamemBERT pour analyser automatiquement les sentiments des données scrappées, car je ne pouvais pas le faire directement via le scraping. Bien que le modèle puisse ne pas être entièrement fiable, surtout étant donné qu'il a été entraîné sur des données en français, l'annotation manuelle pour évaluer sa performance aurait été trop longue en raison de la grande quantité de données. Comme ici la qualité des données n'est pas le plus important, je suis restée sur cette décision.

Visualisations et Statistiques

Distribution des longueurs des commentaires

J'ai analysé la distribution des longueurs des commentaires pour voir si elle suit une distribution particulière et pour mieux comprendre la répartition des longueurs.

Répartition des sentiments

J'ai visualisé la répartition des différentes émotions dans les commentaires pour avoir une idée de la fréquence de chaque émotion dans le dataset.

Loi de Zipf

J'ai appliqué la loi de Zipf aux données pour vérifier si les fréquences des mots suivent cette loi, ce qui est une caractéristique courante des langages naturels.

Mes scripts

Lancement d'un environnement virtuel

Pour éviter les conflits de version, nous allons créer un environnement virtuel. Pour créer un environnement virtuel, vous pouvez procéder comme suit :

python3 -m venv nom_du_venv

Ensuite, il va vous falloir activer l’environnement.

source nom_du_venv/bin/activate

Lorsque c’est fait, vous verrez entre parenthèse le nom de votre environnement tout à gauche de la ligne de commande.

N’oubliez pas de désactiver l’environnement lorsque vous avez terminé.

deactivate

Installer les modules

Avant de pouvoir lancer les scripts, il faut que vous ayez les bons modules installés dans votre environnement virtuel. Pour cela, il vous suffit simplement de lancer la commande suivante :

pip install -r requirements.txt

Lancement des scripts

Pour lancer le scraping du web, le nettoyage des données et sauvegarder les données dans un format tabulaire, il suffit simplement de lancer le fichier tabulaire.py. Vous pouvez le faire de cette manière :

python3 tabulaire.py

Grâce à la fonction main et à l'importation des fichiers, les trois scripts se lancent en même temps. Ce script permet de scraper des posts et réponses sur Threads, de les nettoyer et de les organiser dans un fichier CSV tabulaire. Il effectue les étapes suivantes :

  1. Scraping des données à partir du site Threads.
  2. Nettoyage des données pour enlever les URLs, émojis, retours chariots, noms d'utilisateur, hashtags, ponctuation, chaînes vides, espaces en trop et caractères spéciaux.
  3. Traitement des textes pour enlever les stop words et effectuer la lemmatisation.
  4. Classification des émotions dans les textes en utilisant un modèle de classification des émotions.
  5. Sauvegarde des données nettoyées et classifiées dans un fichier CSV.