无法将语料库转换为 R 中的数据框
Unable to convert a Corpus to Data Frame in R
我查看了此处发布的其他类似问题(如 this),但问题仍然存在。
我有一个文本数据的数据框,我需要对其进行提取。所以我将它转换成一个语料库,对其进行词干提取,然后从词干中完成单词,然后尝试获取文本数据框作为输出。
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 link
它们都产生以下错误:
Error in UseMethod("meta", x) :
no applicable method for 'meta' applied to an object of class "character"
如有任何帮助,我们将不胜感激。
我已经用 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) )
应该这样做:
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)
您必须将 corpus
转换为 plaintextdocument
。
myCorpus <- tm_map(myCorpus, PlainTextDocument)
另一个选项:
df <- as.data.frame(as.matrix(myCorpus))
我查看了此处发布的其他类似问题(如 this),但问题仍然存在。
我有一个文本数据的数据框,我需要对其进行提取。所以我将它转换成一个语料库,对其进行词干提取,然后从词干中完成单词,然后尝试获取文本数据框作为输出。
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 link
它们都产生以下错误:
Error in UseMethod("meta", x) :
no applicable method for 'meta' applied to an object of class "character"
如有任何帮助,我们将不胜感激。
我已经用 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) )
应该这样做:
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)
您必须将 corpus
转换为 plaintextdocument
。
myCorpus <- tm_map(myCorpus, PlainTextDocument)
另一个选项:
df <- as.data.frame(as.matrix(myCorpus))