Plus que des mots : tokenization (2)
Le package tidytext vous permet d’analyser des données textuelles avec les packages du "tidyverse" comme dplyr et sparklyr. La façon de mener une analyse de sentiment dépasse le cadre de ce cours ; vous trouverez plus de détails dans le cours Sentiment Analysis. Cet exercice a pour but de vous donner un rapide aperçu de la démarche sur Spark.
L’analyse de sentiment permet d’attribuer un score ou une émotion à chaque mot. Par exemple, dans le lexique AFINN, le mot "outstanding" a un score de +5, car il est presque toujours utilisé dans un contexte positif. "grace" est légèrement positif, avec un score de +1. "fraud" est généralement employé dans un contexte négatif, avec un score de -4. L’ensemble de scores AFINN est renvoyé par get_sentiments("afinn"). Pour plus de commodité, les mots « unnestés » et le lexique de sentiments ont été copiés dans Spark.
En général, vous souhaitez comparer le sentiment de plusieurs groupes de données. Pour cela, on utilise le motif de code suivant.
text_data %>%
inner_join(sentiments, by = "word") %>%
group_by(some_group) %>%
summarize(positivity = sum(score))
Un inner join prend toutes les valeurs de la première table et cherche des correspondances dans la seconde. S’il en trouve, il ajoute les données de la deuxième table. Contrairement à un left join, il supprime les lignes sans correspondance. Le principe est illustré dans ce schéma.

Comme les left joins, les inner joins sont un type de mutating join, car ils ajoutent des colonnes à la première table. Voyez si vous pouvez deviner quelle fonction utiliser pour les inner joins et comment l’employer. (Indice : l’utilisation est très similaire à left_join(), anti_join() et semi_join() !)
Cet exercice fait partie du cours
Introduction à Spark avec sparklyr en R
Instructions
Une connexion Spark a été créée pour vous sous le nom spark_conn. Les tibbles contenant les mots des titres et le lexique de sentiments stockés dans Spark ont été pré-définis sous les noms title_text_tbl et afinn_sentiments_tbl respectivement.
- Créez une variable appelée
sentimental_artistsà partir detitle_text_tbl.- Utilisez
inner_join()pour joindreafinn_sentiments_tblàtitle_text_tblpar"word". - Regroupez par
artist_name. - Résumez en définissant une variable
positivity, égale à la somme du champscore.
- Utilisez
- Trouvez les 5 artistes dont les titres sont les plus négatifs.
- Triez
sentimental_artistspar positivité croissante. - Utilisez
slice_maxpour obtenir les 5 meilleurs résultats.
- Triez
- Trouvez les 5 artistes dont les titres sont les plus positifs.
- Triez
sentimental_artistspar positivité décroissante. - Obtenez les 5 meilleurs résultats.
- Triez
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
# title_text_tbl, afinn_sentiments_tbl have been pre-defined
title_text_tbl
afinn_sentiments_tbl
sentimental_artists <- title_text_tbl %>%
# Inner join with sentiments on word field
___ %>%
# Group by artist
___ %>%
# Summarize to get positivity
___
sentimental_artists %>%
# Arrange by ascending positivity
___ %>%
# Get top 5
___
sentimental_artists %>%
# Arrange by descending positivity
___ %>%
# Get top 5
___