2 votes

Erreur dans check_input(x) : L'entrée doit être un vecteur de caractères de n'importe quelle longueur ou une liste de vecteurs de caractères, dont chacun a une longueur de 1.

En utilisant le paquet tidytext, je veux transformer mon tibble en un token par document par ligne. J'ai transformé la colonne de texte de mon tibble de facteur en caractère mais j'obtiens toujours la même erreur.

text_df <- tibble(line = 1:3069, text = text)

Mon tibble ressemble à ceci, avec une colonne comme caractère :

# A tibble: 3,069 x 2
line text$text  
<int> <chr> 

Cependant, lorsque j'essaie d'appliquer unnest_tokens :

text_df %>%
  unnest_tokens(word, text$text)

Je reçois toujours la même erreur :

Erreur dans check_input(x) : L'entrée doit être un vecteur de caractères de n'importe quelle longueur ou une liste de vecteurs de caractères, chacun ayant une longueur de 1. de caractères, chacun d'entre eux ayant une longueur de 1.

Quel est le problème dans mon code ?

PS : J'ai consulté différents articles sur le sujet, mais sans succès.

Merci.

4voto

shs Points 960

Une partie au moins du problème vient du fait que le nom de la variable contient un "$". Ce que vous faites effectivement dans votre code est d'essayer d'obtenir l'élément "text" à partir de l'objet "text", qui est probablement la fonction graphics::text et qui n'est pas sous-ensemble.

Changez le nom de "text$text" ou mettez-le entre guillemets :

text_df %>% 
   unnest_tokens(word, `text$text`)

En général, vous devriez éviter d'utiliser des caractères spéciaux dans les noms de variables, car cela ne fait qu'entraîner des erreurs comme celle-ci.

Si votre problème persiste, veuillez fournir un exemple minimal reproductible : Comment créer un excellent exemple reproductible en R

2voto

Moody_Mudskipper Points 18115

Votre text est probablement un cadre de données avec une seule colonne. text colonne :

library(tibble)
library(dplyr,warn.conflicts = FALSE)
library(tidytext)

text <- data.frame(text= c("hello world", "this is me"), stringsAsFactors = FALSE)
text_df <- tibble(line = 1:2, text = text)

text_df
#> # A tibble: 2 x 2
#>    line text$text  
#>   <int> <chr>      
#> 1     1 hello world
#> 2     2 this is me

text_df %>% 
  unnest_tokens(word, text$text)

Erreur dans check_input(x) :

L'entrée doit être un vecteur de caractères de n'importe quelle longueur ou une liste de caractères. dont chacun a une longueur de 1.

Modifiez-le pour extraire la colonne de texte et continuez :

text_df <- mutate(text_df, text = text$text)
# or if your text is stored as factor
# text_df <- mutate(text_df, text = as.character(text$text))

text_df
#> # A tibble: 2 x 2
#>    line text       
#>   <int> <chr>      
#> 1     1 hello world
#> 2     2 this is me

text_df %>% 
  unnest_tokens(word, text)
#> # A tibble: 5 x 2
#>    line word 
#>   <int> <chr>
#> 1     1 hello
#> 2     1 world
#> 3     2 this 
#> 4     2 is   
#> 5     2 me

C'est une bonne idée d'utiliser str() ou parfois summary() , names() o unclass() pour diagnostiquer ce genre de problèmes :

text <- data.frame(text= c("hello world", "this is me"), stringsAsFactors = FALSE)
text_df <- tibble(line = 1:2, text = text)
str(text_df)
#> Classes 'tbl_df', 'tbl' and 'data.frame':    2 obs. of  2 variables:
#>  $ line: int  1 2
#>  $ text:'data.frame':    2 obs. of  1 variable:
#>   ..$ text: chr  "hello world" "this is me"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X