2017-10-13 10 views
0

Il s'agit probablement d'une question stupide, mais je suis allé sur Google et googlé et ne trouve pas de solution. Je pense que c'est parce que je ne connais pas la bonne façon de formuler ma question à chercher.En face de unnest_tokens

J'ai un cadre de données que j'ai converti pour ranger le format de texte dans R pour se débarrasser des mots d'arrêt. Je voudrais maintenant «désordonner» ce cadre de données à son format original.

Quelle est la commande inverse/inverse de unnest_tokens?

Editer: voici à quoi ressemblent les données avec lesquelles je travaille. J'essaie de reproduire des analyses tirées du livre Tidy Text de Silge and Robinson, mais en utilisant des librettos d'opéra italiens.

character = c("FIGARO", "SUSANNA", "CONTE", "CHERUBINO") 
line = c("Cinque... dieci.... venti... trenta... trentasei...quarantatre", "Ora sì ch'io son contenta; sembra fatto inver per me. Guarda un po', mio caro Figaro, guarda adesso il mio cappello.", "Susanna, mi sembri agitata e confusa.", "Il Conte ieri perché trovommi sol con Barbarina, il congedo mi diede; e se la Contessina, la mia bella comare, grazia non m'intercede, io vado via, io non ti vedo più, Susanna mia!") 
sample_df = data.frame(character, line) 
sample_df 

character line 
FIGARO Cinque... dieci.... venti... trenta... trentasei...quarantatre 
SUSANNA Ora sì ch'io son contenta; sembra fatto inver per me. Guarda un po', mio caro Figaro, guarda adesso il mio cappello. 
CONTE  Susanna, mi sembri agitata e confusa. 
CHERUBINO Il Conte ieri perché trovommi sol con Barbarina, il congedo mi diede; e se la Contessina, la mia bella comare, grazia non m'intercede, io vado via, io non ti vedo più, Susanna mia! 

Je passe en texte bien rangé pour que je puisse me débarrasser des mots d'arrêt:

tribble <- sample_df %>% 
      unnest_tokens(word, line) 
# Get rid of stop words 
# I had to make my own list of stop words for 18th century Italian opera 
itstopwords <- data_frame(text=mystopwords) 
names(itstopwords)[names(itstopwords)=="text"] <- "word" 
tribble2 <- tribble %>% 
      anti_join(itstopwords) 

Maintenant, j'ai quelque chose comme ceci:

text word 
FIGARO cinque 
FIGARO dieci 
FIGARO venti 
FIGARO trenta 
... 

Je voudrais récupérer dans le format du nom du personnage et la ligne associée pour regarder d'autres choses. Fondamentalement, j'aimerais que le texte soit dans le même format que précédemment, mais avec des mots d'arrêt supprimés.

+0

Salut, s'il vous plaît lire [ce] (https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) et modifier votre question. En savoir plus sur ce que sont vos données et ce que vous avez fait permettra aux autres utilisateurs de vous aider. – shea

Répondre

1

Pas une question stupide! La réponse dépend un peu de ce que vous essayez de faire, mais voici mon approche habituelle si je voulais remettre mon texte à sa forme originale après un traitement sous sa forme ordonnée, en utilisant les fonctions map de purrr. Tout d'abord, passons du texte brut au format ordonné.

library(tidyverse) 
library(tidytext) 


tidy_austen <- janeaustenr::austen_books() %>% 
    group_by(book) %>% 
    mutate(linenumber = row_number()) %>% 
    ungroup() %>% 
    unnest_tokens(word, text) 

tidy_austen 
#> # A tibble: 725,055 x 3 
#>     book linenumber  word 
#>     <fctr>  <int>  <chr> 
#> 1 Sense & Sensibility   1  sense 
#> 2 Sense & Sensibility   1   and 
#> 3 Sense & Sensibility   1 sensibility 
#> 4 Sense & Sensibility   3   by 
#> 5 Sense & Sensibility   3  jane 
#> 6 Sense & Sensibility   3  austen 
#> 7 Sense & Sensibility   5  1811 
#> 8 Sense & Sensibility   10  chapter 
#> 9 Sense & Sensibility   10   1 
#> 10 Sense & Sensibility   13   the 
#> # ... with 725,045 more rows 

Le texte est bien rangé maintenant! Mais on peut le désordonner, revenir à quelque chose comme sa forme originale. J'approche généralement cela en utilisant nest de tidyr, puis quelques fonctions map de purrr.

nested_austen <- tidy_austen %>% 
    nest(word) %>% 
    mutate(text = map(data, unlist), 
     text = map_chr(text, paste, collapse = " ")) 

nested_austen 
#> # A tibble: 62,272 x 4 
#>     book linenumber    data 
#>     <fctr>  <int>   <list> 
#> 1 Sense & Sensibility   1 <tibble [3 x 1]> 
#> 2 Sense & Sensibility   3 <tibble [3 x 1]> 
#> 3 Sense & Sensibility   5 <tibble [1 x 1]> 
#> 4 Sense & Sensibility   10 <tibble [2 x 1]> 
#> 5 Sense & Sensibility   13 <tibble [12 x 1]> 
#> 6 Sense & Sensibility   14 <tibble [13 x 1]> 
#> 7 Sense & Sensibility   15 <tibble [11 x 1]> 
#> 8 Sense & Sensibility   16 <tibble [12 x 1]> 
#> 9 Sense & Sensibility   17 <tibble [11 x 1]> 
#> 10 Sense & Sensibility   18 <tibble [15 x 1]> 
#> # ... with 62,262 more rows, and 1 more variables: text <chr> 

Qu'est-ce que le texte ressemble à la fin, dans ce cas particulier?

nested_austen %>% 
    select(text) 
#> # A tibble: 62,272 x 1 
#>                 text 
#>                 <chr> 
#> 1            sense and sensibility 
#> 2              by jane austen 
#> 3                1811 
#> 4               chapter 1 
#> 5 the family of dashwood had long been settled in sussex their estate 
#> 6 was large and their residence was at norland park in the centre of 
#> 7  their property where for many generations they had lived in so 
#> 8 respectable a manner as to engage the general good opinion of their 
#> 9 surrounding acquaintance the late owner of this estate was a single 
#> 10 man who lived to a very advanced age and who for many years of his 
#> # ... with 62,262 more rows