Utilisateur:Sadjia AKZIZ/Analyses textuelles (M2 D2SN, 2024)

_1ème Séance_

Je voudrais explorer un DataFrame df_AI_subject qui contient des liens vers des pages web dans une colonne intitulée 'Description/links'. et je souhaite extraire le contenu textuel de ces pages web pour l'analyser ou l'utiliser ultérieurement.

Objectif

modifier

L'objectif de ce script est d'automatiser le processus d'extraction et de nettoyage des textes provenant de plusieurs pages web en utilisant les URLs fournies dans le DataFrame. Ensuite, il compile ces textes extraits pour une utilisation ultérieure, comme l'analyse de contenu.

Étapes Explicatives

modifier
  1. Importation des Bibliothèques
    • requests : Pour effectuer des requêtes HTTP afin de récupérer le contenu des pages web.
    • BeautifulSoup : Pour analyser et extraire le contenu textuel des pages web.
    • pandas : Pour manipuler le DataFrame contenant les URLs des pages web.
  2. Extraction des URLs
    • Convertir les URLs de la colonne 'Description/links' du DataFrame en une liste de chaînes de caractères. Cela facilite l'itération sur chaque URL.
  3. Initialisation d'une Liste pour les Textes Extraits
    • Créer une liste vide (textes_extraits) pour stocker les textes extraits des pages web.
  4. Définition d'une Fonction pour Extraire et Nettoyer le Texte d'un Lien
    • La fonction extract_and_clean_text effectue les tâches suivantes :
      • Envoie une requête HTTP pour récupérer le contenu de la page.
      • Vérifie le succès de la requête.
      • Utilise BeautifulSoup pour analyser le contenu HTML de la page.
      • Extrait tout le texte brut de la page.
      • Nettoie le texte en supprimant les lignes vides et les espaces superflus.
      • Retourne le texte nettoyé ou None en cas d'échec de la requête.
  5. Traitement des URLs Principales
    • Pour chaque URL principale :
      • Effectue une requête HTTP et vérifie son succès.
      • Utilise BeautifulSoup pour analyser le contenu HTML de la page.
      • Cherche toutes les balises ul avec une classe spécifique pour trouver des listes de liens (balises a).
      • Extrait les URLs de ces liens et les stocke dans une liste (mylist).
  6. Extraction et Nettoyage des Textes des Liens Extraits
    • Pour chaque URL dans mylist :
      • Vérifie si l'URL commence par https:// pour s'assurer qu'il s'agit d'un lien valide.
      • Utilise la fonction extract_and_clean_text pour extraire et nettoyer le texte de la page.
      • Ajoute le texte nettoyé à une liste temporaire (textes_page).
      • En cas d'échec de l'extraction, imprime un message d'erreur.
  7. Compilation des Textes Extraits
    • Concatène les textes extraits de chaque sous-lien en une seule chaîne de caractères.
    • Ajoute cette chaîne de caractères à la liste principale (textes_extraits).
  8. Affichage des Textes Extraits
    • Itère sur la liste textes_extraits et affiche chaque texte extrait pour vérification ou analyse.


Les résultats du travail:

https://github.com/AKZIZ/Webscraping

_2ème Séance_

En cherchant les mots les plus fréquents pour pouvoir filtrer mes articles et ne garder que les articles qui concernent le sujet de mémoire qui l'impact d'une maladie sur la qualité de vie des patients et des proches

Les 10 mots les plus fréquents dans l'article : cancer: 3 famille: 2 résumé: 1 expérience: 1 traitements: 1 augmente: 1 interdépendance: 1 entre: 1 membres: 1 durant: 1.

les étapes sont les suivantes:

  1. Téléchargement des ressources nécessaires :
    • Télécharger les ressources pour la tokenisation, les stopwords et la lemmatisation.
  2. Définition de la fonction extract_keywords :
    • Créer une fonction qui prend un texte d'article en entrée.
  3. Tokenization des mots :
    • Diviser le texte en une liste de mots (tokens).
  4. Récupération et combinaison des stopwords pour le français et l'anglais :
    • Récupérer les listes de stopwords pour les deux langues.
    • Ajouter des stopwords supplémentaires spécifiques.
    • Combiner toutes les listes de stopwords en un seul ensemble.
  5. Lemmatization des mots :
    • Normaliser les mots en les ramenant à leur forme de base.
    • Filtrer les mots non-alphabétiques et supprimer les stopwords.
  6. Calcul de la fréquence des mots :
    • Créer une distribution de fréquence des tokens lemmatisés.
  7. Extraction des 10 mots les plus fréquents :
    • Extraire les 10 mots les plus fréquents et les préparer pour les retourner.
  8. Conversion des listes de mots-clés en chaînes de caractères dans un DataFrame :
    • Convertir chaque liste de mots-clés en une seule chaîne de caractères.
  9. Regroupement des mots-clés en une seule chaîne de caractères :
    • Combiner tous les mots-clés en une seule chaîne de caractères.
  10. Visualisation des mots-clés avec WordCloud :
    • Importer les bibliothèques nécessaires pour créer un nuage de mots et afficher les graphiques.
  11. Chargement du modèle linguistique de spaCy (en français) :
    • Charger le modèle de traitement de texte en français de spaCy.
  12. Analyse du texte regroupé avec spaCy :
    • Utiliser spaCy pour analyser le texte regroupé.
  13. Filtrage des tokens pour exclure les verbes :
    • Créer une liste de tokens en excluant ceux qui sont des verbes.

Les résultats sont consultables:

https://github.com/AKZIZ/WordCloud-


_3ème Séance_

Je n'ai pas trop avancé aujourd'hui car je voulais faire de l'analyse syntaxique pour classer les patients atteints du cancer ou pas, mais je n'arrive pas à introduire la négation et exclure la famille, si vous pourriez me débloquer. Je suis passée par la bibliothèque EDS-NLP, la j'avance bien sauf que je ne comprend pas trop tout le script qu'il y a derrière tout ça.

le résultat est consultable en cliquant sur le lien ci-dessous:

https://github.com/AKZIZ/NLP

_4ème Séance_

Présentation des Résultats

modifier

Analyse de Sentiments des Tweets à l'aide de NLP et Machine Learning

modifier

Pour cette étude, j'ai exploré l'analyse de sentiments en utilisant un fichier tweet.csv trouvé sur Kaggle. Voici les étapes détaillées de cette analyse :

  1. Importation des Données :
    • Le fichier tweet.csv a été importé dans un DataFrame pour manipulation.
  2. Filtrage des Données :
    • J'ai conservé uniquement les tweets classifiés comme positifs et négatifs, en excluant les tweets neutres.
    • Le pourcentage de tweets positifs et négatifs a été calculé et analysé.
  3. Nettoyage des Données :
    • Une fonction appelée clean a été créée. Cette fonction prend une phrase (texte de type str) en paramètre et retourne un texte lemmatisé (str) avec des tokens séparés par des espaces.
    • Les stopwords anglais ont été récupérés via NLTK et stockés dans une liste stopwordsenglish.
    • La fonction clean a été complétée pour supprimer la ponctuation et les stopwords.
  4. Préparation des Données :
    • La fonction clean a été appliquée à la colonne text du DataFrame. Les résultats ont été stockés dans une nouvelle colonne clean_text_nlp.
    • La colonne clean_text_nlp a été copiée dans une série X, et la colonne sentiment dans une série y.
    • Un train-test split a été effectué avec 75% des données pour l'entraînement et 25% pour le test, avec un random_state de 32.
  5. Vectorisation et Entraînement des Modèles :
    • Un CountVectorizer a été appliqué pour transformer le texte en vecteurs de caractéristiques, suivi de l'entraînement de modèles de classification.
    • Un TfidfVectorizer a également été appliqué pour la transformation et l'entraînement des modèles de classification.
  6. Évaluation des Modèles :
    • Les scores des différents modèles ont été comparés pour déterminer quels paramètres offraient les meilleures performances.
    • Une nouvelle colonne sentiment_predict a été créée pour stocker les résultats des prédictions.
  7. Visualisation des Résultats :
    • Les résultats réels ont été comparés aux résultats prédits à l'aide de visualisations.

Pour une exécution complète du script, n'oubliez pas de télécharger le fichier tweet.csv depuis Kaggle. Vous pouvez accéder aux résultats détaillés via le lien suivant :

https://colab.research.google.com/drive/1J51mANLOm8e9xPdbxooLcQQc3s42aSYk?usp=sharing


_5ème Séance_

Analyse Syntaxique des Comptes Rendus de Patients en Urgence pour Suspicion d'Embolie Pulmonaire

modifier

Objectif de l'Analyse

modifier

L'objectif de cette analyse est de repérer et sélectionner tous les patients admis aux urgences avec une embolie pulmonaire parmi l'ensemble des admissions.

Contexte de la Démonstration

modifier

Pour illustrer les résultats de cette analyse, un jeu de données anonymisé contenant deux rapports de patients a été utilisé. Toutefois, l'analyse complète a été réalisée sur une cohorte de plus de 10 000 patients. En raison de la nature sensible des données médicales, la population réelle ne peut être présentée.

Méthodologie et Outils Utilisés

modifier

Pour mener à bien cette analyse, j'ai utilisé des techniques de traitement du langage naturel (NLP) via la bibliothèque EDS_NLP, qui est spécialement conçue pour l'analyse des données médicales. Voici les étapes détaillées de l'analyse :

  1. Préparation des Données :
    • Les rapports de patients sont collectés et anonymisés pour protéger les informations personnelles.
    • Les rapports sont formatés pour être compatibles avec les outils de NLP.
  2. Installation et Configuration de EDS_NLP :
    • EDS_NLP est une bibliothèque open-source dédiée à l'analyse des textes médicaux.
    • Elle doit être installée dans un environnement Python 3.7.
    • Installation de la bibliothèque : pip install eds-nlp
  3. Analyse Syntaxique :
    • La bibliothèque EDS_NLP est utilisée pour effectuer une analyse syntaxique des rapports.
    • Les entités médicales pertinentes, telles que les mentions d'embolies pulmonaires, sont extraites.
    • Les rapports sont traités pour identifier les patients ayant une embolie pulmonaire.
  4. Filtrage des Résultats :
    • Les rapports sont filtrés pour ne conserver que ceux contenant des indications d'embolie pulmonaire.
    • Les résultats sont validés pour assurer leur précision.

Résultats

modifier

Les résultats de l'analyse sont disponibles via le lien suivant : [https://github.com/AKZIZ/NLP_analyse-synthaxique]

Conclusion

modifier

Cette approche permet d'exploiter efficacement les techniques de NLP pour l'analyse des données médicales, facilitant ainsi l'identification des patients atteints d'affections spécifiques, comme l'embolie pulmonaire, à partir des comptes rendus médicaux. La bibliothèque EDS_NLP s'avère être un outil précieux pour ce type d'analyse en raison de sa spécialisation et de sa compatibilité avec les environnements Python.