CommencerCommencer gratuitement

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

Afficher le cours

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 de track_metadata_tbl.
    • Sélectionnez les champs artist_name et title.
    • 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 word en l’aplatissant vers une liste de vecteurs de caractères à l’aide de lapply et as.character.
    • Utilisez unnest() pour aplatir la colonne de listes et obtenir un mot par ligne.

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
  ___
Modifier et exécuter le code