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
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_textop basis vantrack_metadata_tbl.- Selecteer de velden
artist_nameentitle. - Gebruik
ft_tokenizer()om een nieuw veldwordte maken, met daarin de titel opgesplitst in woorden. - Haal het resultaat op met
collect(). - Pas
mutatetoe op de kolomworden vlak deze af naar een lijst van tekenreeksvectoren metlapplyenas.character. - Gebruik
unnest()om de lijstkolom af te vlakken, zodat je één woord per rij krijgt.
- Selecteer de velden
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
___