R supprimer les mots vides à partir d'un caractère de vecteur à l'aide de %en%
J'ai un bloc de données avec des chaînes que je voudrais supprimer les mots vides de. J'essaie d'éviter d'utiliser le tm
paquet comme c'est un grand ensemble de données et tm
semble fonctionner un peu lentement. Je suis l'aide de la tm
stopword
dictionnaire.
library(plyr)
library(tm)
stopWords <- stopwords("en")
class(stopWords)
df1 <- data.frame(id = seq(1,5,1), string1 = NA)
head(df1)
df1$string1[1] <- "This string is a string."
df1$string1[2] <- "This string is a slightly longer string."
df1$string1[3] <- "This string is an even longer string."
df1$string1[4] <- "This string is a slightly shorter string."
df1$string1[5] <- "This string is the longest string of all the other strings."
head(df1)
df1$string1 <- tolower(df1$string1)
str1 <- strsplit(df1$string1[5], " ")
> !(str1 %in% stopWords)
[1] TRUE
Ce n'est pas la réponse que je cherche. Je vais essayer d'obtenir un vecteur ou d'une chaîne de mots qui ne sont PAS dans le stopWords
vecteur.
Ce que je fais mal?
Le problème est évident: string nbr 5 est grammaticalement incorrect. 🙂 . Ok, bien, je pense que Arun e bonne voie, en supposant que "mot" correspond à une chaîne de caractères sans les espaces. Après l'exécution de son code sur tous les éléments de
df1$string
, vous pourriez faire unique
si vous voulez juste une liste, pas des quantités, des mots.OriginalL'auteur screechOwl | 2013-03-06
Vous devez vous connecter pour publier un commentaire.
Vous n'êtes pas accès à la liste correctement et que vous êtes de ne pas obtenir les éléments de la suite de
%in%
(ce qui donne une logique vecteur de VRAI/FAUX). Vous devriez faire quelque chose comme ceci:(ou)
Pour l'ensemble de la
data.frame
df1, vous pourriez faire quelque chose comme:Merci pour l'aide
Negate
-- j'avais complètement oublié lafunprog
suite de goodies.À l'aide de
setdiff
serait encore plus simple, et vous devriez probablement utiliserlapply
sur les résultats destrsplit
:lapply(strsplit(df1$string, " "), setdiff, stopWords)
. Le seul inconvénient est que vous obtenez un unique les mots.setdiff
appels%in%
(exactementmatch(x, y, 0L) == 0L
).OriginalL'auteur Arun
Premier. Vous devriez unlist
str1
ou de l'utilisationlapply
sistr1
est un vecteur:Seconde. Solution complexe:
OriginalL'auteur Artem Klevtsov