J'utilise R 3.0.1 sur la plate-forme: x86_64-Apple-darwin10.8.0 (64 bits)
J'essaie d'utiliser tm_map à partir de la bibliothèque tm. Mais quand j'exécute le code
library(tm)
data('crude')
tm_map(crude, stemDocument)
Je reçois cette erreur:
Warning message:
In parallel::mclapply(x, FUN, ...) :
all scheduled cores encountered errors in user code
Est-ce que quelqu'un connaît une solution pour cela?
Je suspecte que le paquet SnowballC
ne soit pas installé, ce qui semble être nécessaire. tm_map
est supposé exécuter stemDocument
sur tous les documents en utilisant mclapply
. Essayez simplement d’exécuter la fonction stemDocument
sur un seul document afin d’extraire l’erreur suivante:
stemDocument(crude[[1]])
Pour moi, j'ai une erreur:
Error in loadNamespace(name) : there is no package called ‘SnowballC’
Je me suis donc contenté d'installer SnowballC
et cela a fonctionné. Clairement, SnowballC
devrait être une dépendance.
Je viens de courir dans cela. Il m'a fallu un peu de fouille mais j'ai découvert ce qui se passait.
J'avais une ligne de code 'rdevel <- tm_map (rdevel, asPlainTextDocument)'
En cours d'exécution, l'erreur a été générée
En parallèle :: mclapply (x, FUN, ...): Tous les cœurs planifiés ont rencontré des erreurs dans le code utilisateur
> getOption ("mc.cores", 2L) [1] 2 >
> rdevel <- tm_map (rdevel, asPlainTextDocument, mc.cores = 1) Erreur dans match.fun (FUN): objet 'asPlainTextDocument' introuvable > rdevel <-tm_map (rdevel, asPlainTextDocument, mc.cores = 4) Message d'avertissement: En parallèle :: mclapply (x, FUN, ...): tous les cœurs planifiés ont rencontré des erreurs dans le code utilisateur >
Donc ... avec plus d'un noyau, plutôt que de vous donner le message d'erreur, "parallèle" vous indique simplement qu'il y avait une erreur dans chaque noyau. Pas utile, parallèle! J'ai oublié le point - le nom de la fonction est supposé être 'as.PlainTextDocument'!
Donc, si vous obtenez cette erreur, ajoutez 'mc.cores = 1' à l'appel 'tm_map' et exécutez-le à nouveau.
J'ai trouvé une réponse à cette question qui a été un succès pour moi dans cette question : Charles Copley, dans sa réponse , indique qu'il pense que le nouveau paquetage tm nécessite que lazy = TRUE
soit explicitement défini.
Donc, votre code ressemblerait à ceci
library(tm)
data('crude')
tm_map(crude, stemDocument, lazy = TRUE)
J'ai aussi essayé sans SnowballC pour voir si c'était une combinaison de ces deux réponses. Cela ne semble pas affecter le résultat de toute façon.
J'ai rencontré le même problème dans tm
avec un Intel Core I7 à processeur Intel Core fonctionnant sous Mac OS X 10.10.5 et j'ai reçu l'avertissement suivant:
Dans mclapply (contenu (x), FUN, ...) erreur rencontrée dans le code utilisateur du noyau 1 planifié, toutes les valeurs du travail seront affectées
Je créais un corpus après avoir téléchargé des données Twitter.
La solution de Charles Copley a également fonctionné pour moi. J'ai utilisé: tm_map(*filename*, stemDocument, lazy = TRUE)
après la création de mon corpus puis tm a fonctionné correctement.
J'ai été confronté au même problème mais finalement résolu. Je suppose que si je nomme le corpus comme "longName" ou "companyNewsCorpus", je comprends le problème, mais si j'utilise la valeur de corpus comme "a", cela fonctionne bien. Vraiment bizarre.
Le code ci-dessous donne le même message d'erreur mentionné dans ce fil
companyNewsCorpus <-Corpus(DirSource("SourceDirectory"),
readerControl = list(language="english"))
companyNewsCorpus <- tm_map(companyNewsCorpus,
removeWords, stopwords("english"))
Mais si je convertis cela ci-dessous, cela fonctionne sans problème.
a <-Corpus(DirSource("SourceDirectory"),
readerControl = list(language="english"))
a <- tm_map(a, removeWords, stopwords("english"))
J'ai également rencontré le même problème lors de l'utilisation de la fonction removeWords de la bibliothèque tm. Certaines des autres réponses telles que la définition du nombre de cœurs sur 1 ont fonctionné pour supprimer l'ensemble de mots vides anglais, mais je souhaitais également supprimer une liste personnalisée de prénoms et de noms de famille de mon corpus; mots longs chacun.
Aucune des autres suggestions n’aiderait à résoudre ce problème et il s’avère que, par essais et erreurs, removeWords semblait avoir une limite de 1 000 mots dans un vecteur. Donc, j'ai écrit cette fonction qui a résolu le problème pour moi:
# Let x be a corpus
# Let y be a vector containing words to remove
removeManyWords <- function (x, y) {
n <- ceiling(length(y)/1000)
s <- 1
e <- 1000
for (i in 1:n) {
x <- tm_map(x, content_transformer(removeWords), y[s:e])
s <- s + 1000
e <- e + 1000
}
x
}
Cette fonction compte essentiellement le nombre de mots dans le vecteur de mots que je souhaite supprimer, puis le divise par 1000 et arrondit au nombre entier le plus proche, n. Nous parcourons ensuite le vecteur de mots pour supprimer n fois. Avec cette méthode, je n'ai pas besoin d'utiliser lazy = TRUE ni de changer le nombre de cœurs à utiliser, comme le montre l'appel réel removeWords dans la fonction. J'espère que cela t'aides!
Je travaillais sur des données Twitter et j'ai eu la même erreur dans la question initiale alors que j'essayais de convertir tout le texte en texte inférieur avec la fonction tm_map()
Warning message: In parallel::mclapply(x, FUN, ...) :
all scheduled cores encountered errors in user code
L’installation et le chargement du package SnowballC
ont complètement résolu le problème. J'espère que cela t'aides.