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
modifierL'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- 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.
- 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.
- Initialisation d'une Liste pour les Textes Extraits
- Créer une liste vide (
textes_extraits
) pour stocker les textes extraits des pages web.
- Créer une liste vide (
- 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.
- La fonction
- 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 (balisesa
). - Extrait les URLs de ces liens et les stocke dans une liste (
mylist
).
- Pour chaque URL principale :
- 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.
- Vérifie si l'URL commence par
- Pour chaque URL dans
- 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
).
- Affichage des Textes Extraits
- Itère sur la liste
textes_extraits
et affiche chaque texte extrait pour vérification ou analyse.
- Itère sur la liste
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:
- Téléchargement des ressources nécessaires :
- Télécharger les ressources pour la tokenisation, les stopwords et la lemmatisation.
- Définition de la fonction
extract_keywords
:- Créer une fonction qui prend un texte d'article en entrée.
- Tokenization des mots :
- Diviser le texte en une liste de mots (tokens).
- 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.
- Lemmatization des mots :
- Normaliser les mots en les ramenant à leur forme de base.
- Filtrer les mots non-alphabétiques et supprimer les stopwords.
- Calcul de la fréquence des mots :
- Créer une distribution de fréquence des tokens lemmatisés.
- Extraction des 10 mots les plus fréquents :
- Extraire les 10 mots les plus fréquents et les préparer pour les retourner.
- 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.
- 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.
- Visualisation des mots-clés avec WordCloud :
- Importer les bibliothèques nécessaires pour créer un nuage de mots et afficher les graphiques.
- Chargement du modèle linguistique de spaCy (en français) :
- Charger le modèle de traitement de texte en français de spaCy.
- Analyse du texte regroupé avec spaCy :
- Utiliser spaCy pour analyser le texte regroupé.
- 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:
_4ème Séance_
Présentation des Résultats
modifierAnalyse de Sentiments des Tweets à l'aide de NLP et Machine Learning
modifierPour 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 :
- Importation des Données :
- Le fichier
tweet.csv
a été importé dans un DataFrame pour manipulation.
- Le fichier
- 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é.
- 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.
- Une fonction appelée
- Préparation des Données :
- La fonction
clean
a été appliquée à la colonnetext
du DataFrame. Les résultats ont été stockés dans une nouvelle colonneclean_text_nlp
. - La colonne
clean_text_nlp
a été copiée dans une sérieX
, et la colonnesentiment
dans une sériey
. - 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.
- La fonction
- 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.
- Un
- É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.
- 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
modifierObjectif de l'Analyse
modifierL'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
modifierPour 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
modifierPour 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 :
- 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.
- 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
- 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.
- 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
modifierLes résultats de l'analyse sont disponibles via le lien suivant : [https://github.com/AKZIZ/NLP_analyse-synthaxique]
Conclusion
modifierCette 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.