Plus que des mots : tokenisation (1)
Parmi les usages courants du text mining, on peut citer l’analyse d’avis d’achat pour comprendre le ressenti des clients sur un produit, ou l’analyse de l’actualité financière pour anticiper le sentiment lié aux cours de Bourse. Pour analyser des données textuelles, les étapes de prétraitement les plus fréquentes consistent à convertir le texte en minuscules (voir tolower()) et à découper les phrases en mots.
ft_tokenizer() réalise ces deux étapes. Son utilisation suit le même schéma que les autres transformations que vous avez vues, sans autres arguments.
shop_reviews %>%
ft_tokenizer("review_text", "review_words")
Comme la sortie peut contenir un nombre différent de mots par ligne, output.col est une colonne de listes, où chaque élément est une liste de chaînes. Pour analyser du texte, il est généralement préférable d’avoir une ligne par mot. Le format liste-de-listes-de-chaînes peut être transformé en un seul vecteur de caractères grâce à unnest() du package tidyr. Il n’existe pas encore de méthode pour « unnest » directement sur Spark ; vous devez donc d’abord rapatrier les données dans R avant la transformation. Le motif de code est le suivant.
library(tidyr)
text_data %>%
ft_tokenizer("sentences", "word") %>%
collect() %>%
mutate(word = lapply(word, as.character)) %>%
unnest(word)
Si vous souhaitez en savoir plus sur l’utilisation du package tidyr, suivez le cours Cleaning Data in R.
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. Une tibble liée aux métadonnées des pistes stockées dans Spark a été pré-définie sous le nom track_metadata_tbl.
- Créez une variable nommée
title_textà partir detrack_metadata_tbl.- Sélectionnez les champs
artist_nameettitle. - Utilisez
ft_tokenizer()pour créer un nouveau champ,word, qui contient le titre découpé en mots. - Collectez le résultat.
- Modifiez la colonne
worden l’aplatissant vers une liste de vecteurs de caractères à l’aide delapplyetas.character. - Utilisez
unnest()pour aplatir la colonne de listes et obtenir un mot par ligne.
- Sélectionnez les champs
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
# track_metadata_tbl has been pre-defined
track_metadata_tbl
title_text <- track_metadata_tbl %>%
# Select artist_name, title
___ %>%
# Tokenize title to words
___ %>%
# Collect the result
___ %>%
# Flatten the word column
___ %>%
# Unnest the list column
___