R entfernen von Stoppwörtern aus einem character-Vektor mit %in%
Habe ich einen Daten-frame mit strings, die ich hatte, wie zu entfernen stop-Wörter aus. Ich versuche zu vermeiden, mit den tm
- Paket, wie es ist ein großer Datensatz und tm
scheint zu laufen ein bisschen zu langsam. Ich bin mit dem tm
stopword
Wörterbuch.
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
Dies ist nicht die Antwort, die ich Suche. Ich versuche, einen Vektor oder eine Zeichenfolge der Wörter, die NICHT im stopWords
Vektor.
Was mache ich falsch?
Das problem ist offensichtlich: string nbr 5 ist grammatikalisch falsch. 🙂 . Ok, gut, ich denke, Arun s e richtigen Weg, vorausgesetzt, dass "Wort" streng bedeutet, eine Zeichenfolge ohne Leerzeichen. Nach dem ausführen seinen code auf alle Elemente der
df1$string
Sie tun konnte unique
wenn Sie wollen einfach nur eine Liste, aber keine Mengen, von den Worten.InformationsquelleAutor screechOwl | 2013-03-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihnen nicht den Zugriff auf die Liste richtig und Sie sind nicht immer die Elemente wieder aus dem Ergebnis der
%in%
(gibt einen logischen Vektor der TRUE/FALSE). Sie sollten etwas wie das hier tun:(oder)
Für die ganze
data.frame
df1, Sie könnten etwas tun wie:Vielen Dank für die Benutzung
Negate
- würde ich völlig vergessen, diefunprog
suite-leckereien.Mit
setdiff
wäre noch einfacher, und Sie sollten wahrscheinlich verwenden Sielapply
auf die Ergebnisse derstrsplit
:lapply(strsplit(df1$string, " "), setdiff, stopWords)
. Der einzige Nachteil ist, dass Sie eindeutige Wörter.setdiff
Anrufe%in%
(genaumatch(x, y, 0L) == 0L
).InformationsquelleAutor Arun
Ersten. Sollten Sie unlist
str1
oder verwenden Sielapply
wennstr1
ist der Vektor:Sekunde. Komplexe Lösung:
InformationsquelleAutor Artem Klevtsov