Aan de slagBegin gratis

Meer dan woorden: tokenization (1)

Veelgebruikte toepassingen van text-mining zijn bijvoorbeeld het analyseren van winkelreviews om het gevoel van kopers over een product te achterhalen, of het analyseren van financieel nieuws om het sentiment rond aandelenkoersen te voorspellen. Om tekstgegevens te analyseren, zijn veelvoorkomende voorbewerkingsstappen: de tekst omzetten naar kleine letters (zie tolower()) en zinnen splitsen in losse woorden.

ft_tokenizer() voert beide stappen uit. Het gebruik volgt hetzelfde patroon als de andere transformaties die je hebt gezien, zonder extra argumenten.

shop_reviews %>%
  ft_tokenizer("review_text", "review_words")

Omdat de uitvoer per rij een verschillend aantal woorden kan bevatten, is output.col een lijstkolom, waarbij elk element een lijst met strings is. Voor tekstanalyse heb je meestal liever één woord per rij in de data. Het formaat “lijst-van-lijsten-van-strings” kun je omzetten naar één tekenreeksvector met unnest() uit het tidyr-pakket. Er is momenteel geen methode om te unnesten op Spark, dus voorlopig moet je de data eerst naar R ophalen voordat je deze transformeert. Het codepatroon hiervoor is als volgt.

library(tidyr)
text_data %>%
  ft_tokenizer("sentences", "word") %>%
  collect() %>%
  mutate(word = lapply(word, as.character)) %>%
  unnest(word)

Wil je meer leren over het tidyr-pakket? Volg dan de cursus Cleaning Data in R.

Deze oefening maakt deel uit van de cursus

Introductie tot Spark met sparklyr in R

Bekijk cursus

Oefeninstructies

Er is al een Spark-verbinding voor je aangemaakt als spark_conn. Een tibble die is gekoppeld aan de trackmetadata die in Spark is opgeslagen, is vooraf gedefinieerd als track_metadata_tbl.

  • Maak een variabele title_text op basis van track_metadata_tbl.
    • Selecteer de velden artist_name en title.
    • Gebruik ft_tokenizer() om een nieuw veld word te maken, met daarin de titel opgesplitst in woorden.
    • Haal het resultaat op met collect().
    • Pas mutate toe op de kolom word en vlak deze af naar een lijst van tekenreeksvectoren met lapply en as.character.
    • Gebruik unnest() om de lijstkolom af te vlakken, zodat je één woord per rij krijgt.

Interactieve oefening met praktijkervaring

Probeer deze oefening door deze voorbeeldcode aan te vullen.

# 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
  ___
Code bewerken en uitvoeren