2015-10-18 67 views
5

我已經查看了此處發佈的其他類似問題(如this),但問題仍然存在。無法將語料庫轉換爲R中的數據框

我有一個文本數據的數據框,我需要幹。所以我將它轉換成一個語料庫,然後完成它,然後完成詞幹的單詞,然後嘗試獲取文本的數據框作爲輸出。

myCorpus <- Corpus(VectorSource(textDf$text)) 
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) 
myCorpus <- tm_map(myCorpus, stemCompletion, dictionary=dictCorpus) 

現在我試圖從這個語料庫中得到一個數據框,所以我嘗試了下面這些命令。

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

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

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

this鏈接

他們都產生以下錯誤:

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

任何幫助將不勝感激。

+1

你能舉一些例子說明數據? – bramtayl

+0

'textDf $ text'是一個充滿推文的字符向量。 – wrahool

回答

8

這應該做到這一點:

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

編輯與工作液,使用crude爲例

這裏的問題是,你可以不適用stemCompletion的轉變。

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

不包括stemCompletion,這需要梗令牌作爲輸入的向量。

所以這應該做到這一點:首先提取轉換後的文本並標記它們,然後完成詞幹,然後粘貼回去。在這裏我已經說明了使用內置的crude語料庫的解決方案。

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

謝謝!這工作。 – wrahool

2

我已經重做了一些早期的代碼與magrittr,只是因爲。

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

您必須將corpus轉換爲plaintextdocument

myCorpus <- tm_map(myCorpus, PlainTextDocument) 
1

另一種選擇:

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