web-dev-qa-db-fra.com

Suppression des mots vides d'un corpus défini par l'utilisateur dans R

J'ai un ensemble de documents:

documents = c("She had toast for breakfast",
 "The coffee this morning was excellent", 
 "For lunch let's all have pancakes", 
 "Later in the day, there will be more talks", 
 "The talks on the first day were great", 
 "The second day should have good presentations too")

Dans cet ensemble de documents, je voudrais supprimer les mots vides. J'ai déjà supprimé la ponctuation et converti en minuscule, en utilisant:

documents = tolower(documents) #make it lower case
documents = gsub('[[:punct:]]', '', documents) #remove punctuation

D'abord je convertis en un objet Corpus:

documents <- Corpus(VectorSource(documents))

Ensuite, j'essaie de supprimer les mots vides:

documents = tm_map(documents, removeWords, stopwords('english')) #remove stopwords

Mais cette dernière ligne entraîne l'erreur suivante:

THE_PROCESS_HAS_FORKED_AND_YOU_CANNOT_USE_THIS_COREFOUNDATION_FUNCTIONALITY___YOU_MUST_EXEC () à déboguer.

Cela a déjà été demandé ici mais aucune réponse n’a été donnée. Que signifie cette erreur?

MODIFIER

Oui, j'utilise le package tm.

Voici la sortie de sessionInfo ():

R version 3.0.2 (2013-09-25) Plate-forme: x86_64-Apple-darwin10.8.0 (64 bits)

4
StatsSorceress

Lorsque je rencontre des problèmes tm, je finis souvent par éditer le texte original. 

C’est un peu gênant de supprimer des mots, mais vous pouvez coller ensemble une expression régulière à partir de la liste de mots clés de tm 

stopwords_regex = paste(stopwords('en'), collapse = '\\b|\\b')
stopwords_regex = paste0('\\b', stopwords_regex, '\\b')
documents = stringr::str_replace_all(documents, stopwords_regex, '')

> documents
[1] "     toast  breakfast"             " coffee  morning  excellent"      
[3] " lunch lets   pancakes"            "later   day  will   talks"        
[5] " talks   first day  great"         " second day   good presentations "
10
Mhairi McNeill

vous pouvez utiliser le package quanteda pour supprimer les mots vides, mais assurez-vous d’abord que vos mots sont des jetons, puis utilisez les éléments suivants:

library(quanteda)
x<- tokens_select(x,stopwords(), selection=)
0
Aakash

Essayez peut-être d'utiliser la fonction tm_map pour transformer le document. Cela semble fonctionner dans mon cas.

> documents = c("She had toast for breakfast",
+  "The coffee this morning was excellent", 
+  "For lunch let's all have pancakes", 
+  "Later in the day, there will be more talks", 
+  "The talks on the first day were great", 
+  "The second day should have good presentations too")
> library(tm)
Loading required package: NLP
> documents <- Corpus(VectorSource(documents))
> documents = tm_map(documents, content_transformer(tolower))
> documents = tm_map(documents, removePunctuation)
> documents = tm_map(documents, removeWords, stopwords("english"))
> documents
<<VCorpus>>
Metadata:  corpus specific: 0, document level (indexed): 0
Content:  documents: 6

Cela donne

> documents[[1]]$content
[1] "  toast  breakfast"
> documents[[2]]$content
[1] " coffee  morning  excellent"
> documents[[3]]$content
[1] " lunch lets   pancakes"
> documents[[4]]$content
[1] "later   day  will   talks"
> documents[[5]]$content
[1] " talks   first day  great"
> documents[[6]]$content
[1] " second day   good presentations "
0
Ely