2015-10-18 14 views
5

zu konvertieren Ich habe die anderen ähnlichen Fragen, die hier gepostet wurden (wie this), aber das Problem besteht weiter.Nicht möglich, ein Corpus zu Datenrahmen in R

Ich habe einen Datenrahmen von Textdaten, die ich vererben muss. Also konvertiere ich es in ein Korpus, stemple es, vervollständige dann die Wörter von den Stämmen und versuche dann, einen Datenrahmen von Text als Ausgabe zu erhalten.

Jetzt versuche ich, einen Datenrahmen von diesem Korpus zurück zu bekommen, also habe ich diese folgenden Befehle ausprobiert.

dataframe<-data.frame(text=unlist(sapply(myCorpus, '[', "content")), stringsAsFactors=F)

und

dataframe<-data.frame(text=unlist(sapply(myCorpus, [)), stringsAsFactors=F)

und auch

dataframe <- 
    data.frame(id=sapply(corpus, meta, "id"), 
       text=unlist(lapply(sapply(corpus, '[', "content"),paste,collapse="\n")), 
       stringsAsFactors=FALSE) 

von this Link

Alle von ihnen produzieren die folgenden Fehler :

Error in UseMethod("meta", x) : 
    no applicable method for 'meta' applied to an object of class "character" 

Jede Hilfe würde sehr geschätzt werden.

+1

Können Sie einige Beispieldaten geben? – bramtayl

+0

'textDf $ text' ist ein Zeichenvektor voller Tweets. – wrahool

Antwort

8

Dies sollte es tun:

data.frame(text = sapply(myCorpus, as.character), stringsAsFactors = FALSE) 

bearbeitet mit der Lösung arbeiten, mit crude als Beispiel

Das Problem hierbei ist, dass Sie nicht stemCompletion als eine Transformation anwenden können.

getTransformations() 
## [1] "removeNumbers"  "removePunctuation" "removeWords"  "stemDocument"  "stripWhitespace" 

nicht enthalten stemCompletion, die einen Vektor von dämmt Tokens als Eingabe.

Das sollte es also tun: Zuerst extrahierst du die transformierten Texte und tokenisierst sie, dann vervollständigst du die Stiele und fügst sie wieder zusammen. Hier habe ich die Lösung mit dem eingebauten crude Korpus illustriert.

data(crude) 
myCorpus <- crude 
myCorpus <- tm_map(myCorpus, removeWords, stopwords('english')) 
myCorpus <- tm_map(myCorpus, content_transformer(tolower)) 
myCorpus <- tm_map(myCorpus, removePunctuation) 
dictCorpus <- myCorpus 
myCorpus <- tm_map(myCorpus, stemDocument) 
# tokenize the corpus 
myCorpusTokenized <- lapply(myCorpus, scan_tokenizer) 
# stem complete each token vector 
myTokensStemCompleted <- lapply(myCorpusTokenized, stemCompletion, dictCorpus) 
# concatenate tokens by document, create data frame 
myDf <- data.frame(text = sapply(myTokensStemCompleted, paste, collapse = " "), stringsAsFactors = FALSE) 
+1

Danke! Das hat funktioniert. – wrahool

2

Ich habe etwas von Ihrem früheren Code mit magritrtr gerade wieder hergestellt.

library(dplyr) 
library(tm) 


dictCorpus = 
    c("I love my cat", "Cullen bae is bae", "4ever alone :(") %>% 
    VectorSource %>% 
    Corpus %>% 
    tm_map(removeWords, stopwords('english')) %>% 
    tm_map(content_transformer(tolower)) %>% 
    tm_map(removePunctuation) 

myCorpus = 
    dictCorpus %>% 
    tm_map(stemDocument) %>% 
    tm_map(stemCompletion, dictionary=dictCorpus) 

data = 
    data_frame(object = 
       myCorpus %>% 
       `class<-`("list") %>% 
       use_series(content)) %>% 
    rowwise %>% 
    mutate(content = 
      object %>% 
      names %>% 
      extract(1)) 
0

Sie haben die corpus in eine plaintextdocument zu konvertieren.

myCorpus <- tm_map(myCorpus, PlainTextDocument) 
1

Eine weitere Option:

df <- as.data.frame(as.matrix(myCorpus))