Au-delà des mots : la tokenisation (2)
Le paquet tidytext vous permet d'analyser des données textuelles avec les outils du « tidyverse » comme dplyr et sparklyr. L'analyse de sentiment dépasse la portée de ce cours; pour en savoir plus, consultez le cours Sentiment Analysis. Cet exercice vise à vous donner un aperçu rapide de la façon de le faire sur Spark.
L'analyse de sentiment permet essentiellement d'attribuer une cote ou une émotion à chaque mot. Par exemple, dans le lexique AFINN, le mot "outstanding" a une cote de +5, puisqu'il est presque toujours utilisé dans un contexte positif. "grace" est légèrement positif et a une cote de +1. "fraud" est généralement utilisé dans un contexte négatif et a une cote de -4. L'ensemble des cotes AFINN est retourné par get_sentiments("afinn"). Pour plus de commodité, les données de mots « désempilées » 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 ce faire, on utilise le canevas de code suivant.
text_data %>%
inner_join(sentiments, by = "word") %>%
group_by(some_group) %>%
summarize(positivity = sum(score))
Une jointure interne prend toutes les valeurs du premier tableau et cherche des correspondances dans le second. Si elle en trouve, elle ajoute les données du second tableau. Contrairement à une jointure à gauche, elle élimine les lignes pour lesquelles aucune correspondance n'est trouvée. Le principe est illustré dans ce schéma.

Comme les jointures à gauche, les jointures internes sont des jointures « mutantes », puisqu'elles ajoutent des colonnes au premier tableau. Voyez si vous pouvez deviner quelle fonction utiliser pour les jointures internes et comment l'employer. (Indice : l'utilisation ressemble beaucoup à left_join(), anti_join() et semi_join() !)
Cette activité fait partie du cours
Introduction à Spark avec sparklyr en R
Instructions de l’exercice
Une connexion Spark a été créée pour vous sous le nom spark_conn. Les tibbles correspondant aux mots des titres et au lexique de sentiments stockés dans Spark ont été prédéfinis sous title_text_tbl et afinn_sentiments_tbl respectivement.
- Créez une variable nommée
sentimental_artistsà partir detitle_text_tbl.- Utilisez
inner_join()pour joindreafinn_sentiments_tblàtitle_text_tblpar"word". - Regroupez par
artist_name. - Résumez pour définir une variable
positivity, égale à la somme du champscore.
- Utilisez
- Trouvez les 5 artistes avec les titres de chansons les plus négatifs.
- Triez
sentimental_artistspar positivité croissante. - Utilisez
slice_maxpour obtenir les 5 meilleurs résultats.
- Triez
- Trouvez les 5 artistes avec les titres de chansons 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 ce code d’exemple.
# 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
___