NLP : Nettoyage complet d’un corpus

Une étape inévitable, essentielle et pourtant fastidieuse pour tout projet NLP : le nettoyage du texte.

Articles liés : Extraction de caractéristiques, Détection de spams et Quelles métriques choisir ?

Photo by The Creative Exchange on Unsplash

Avoir une méthode précise permet de gagner en temps et en motivation.

Pour cet article, je m’intéresse à un jeu de données contenant des sms classifiés en tant que spam ou non (lien du jeu de données ici).

Figure 1 : Premières lignes du jeu de données

Ce jeu est très intéressant car la structure elle-même va avoir besoin d’un petit nettoyage. De plus, les sms contiennent de la ponctuation, des chiffres, des abréviations dans tous les sens.

Le jeu de données ne contient que deux colonnes utiles : le SMS et un booleen indiquant la présence d’un spam ou non.

Avant de nettoyer les textes, nous allons nettoyer le jeu de données, à savoir nous séparer des trois dernières colonnes, renommer les deux colonnes utiles et transformer la variable à expliquer en boolean (0 ou 1).

Sélection et renomage des colonnes utiles

Après nettoyage du jeu :

Avec quelques lignes de code, on y voit déjà plus clair.

Nettoyage du texte

Pour le nettoyage du texte, nous allons effectuer ces différentes étapes :

  • Remplacer toutes les majuscules par des minuscules
  • Retirer les accents (étape très utile pour les textes français)
  • Retirer la ponctuation
  • Retirer les nombres (seulement si ceux-ci n’apportent pas d’informations pour l’analyse qui suivra !!! Dans notre problème binaire, les nombres semblent apporter de l’information (comme les numéros de téléphone); on va les remplacer par “phonenumber”).
  • Lemmatizer
  • Enlever les “stop words”
  • Supprimer les lignes vides

La lemmatisation est une opération qui va remplacer chaque mot par sa forme de base (infinitif d’un verbe, singulier d’un pluriel, “its”->”-PRON-). L’intérêt de cette étape est de ne pas perdre d’information entre des mots conceptuellement identiques comme “petit” et “petite”. Cette étape est essentielle pour la classification de textes. Dans notre cas, les “won” vont devenir “win”, ce qui simplifiera la reconnaissance de spam. Il existe un autre procédé, appelé stemming, qui se contente de rogner les mots. Je la trouve moins efficace, notamment vis-à-vis de l’exemple précédent.

Dans la fonction lemmatize, nous créons un lemmatized_array qui va séparer chaque mot (tokeniser); chacun de ces mots deviendra un élément d’un tableau dont on retirera les stop words.

Il existe des mots qui n’apportent pas d’informations. En français, ces mots sont “le”, “la”, “mon”… En anglais, ce sont ‘i’, ‘me’, ‘my’, ‘myself’, ‘we’… Ces mots doivent être retirés pour faciliter le travail des algorithmes.

Après toutes ces opérations, certains sms sont vides (11 sms concernés). Malgré des adieux déchirants, nous allons devoir nous en séparer.

Conclusion

Après quelques simples opérations, notre jeu de données est propre et utilisable par des algorithmes pour en retirer un maximum d’informations.

Aller plus loin

Pour aller plus loin dans le nettoyage, on pourrait chercher manuellement des synonymes à mettre en commun (comme “naah” et “nah” ou “idk” et “i dont know”), toujours afin de ne pas perdre d’informations et de réduire le nombre de paramètres.

Et maintenant ?

Une fois notre jeu de données nettoyé, on peut enregistrer les résultats dans un nouveau csv pour ne pas répéter l’opération de nettoyage.

Ensuite nous pourrons réaliser le processus de sélection de caractéristiques, processus réalisé ici !

Data scientist jr & Javascript + Python full-stack developer… ok I like tech and do all kind of stuff

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store