Невозможно преобразовать корпус в фрейм данных в R

Я просмотрел другие похожие вопросы, которые были размещены здесь (например, this), но проблема не устранена.

У меня есть dataframe текстовых данных, которые мне нужно остановить. Итак, я конвертирую его в корпус, формирую его, затем завершаю слова из основы, а затем пытаюсь получить фрейм данных текста в качестве вывода.

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)

из этой ссылки

Все они выдают следующую ошибку:

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

Любая помощь будет принята с благодарностью.


person wrahool    schedule 18.10.2015    source источник
comment
Вы можете привести примеры данных?   -  person bramtayl    schedule 18.10.2015
comment
textDf$text - это вектор символов, полный твитов.   -  person wrahool    schedule 18.10.2015


Ответы (4)


Это должно сделать это:

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)
person Ken Benoit    schedule 18.10.2015

Я переделал часть вашего предыдущего кода с помощью 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) )
person bramtayl    schedule 18.10.2015
comment
отличный ответ! Можно ли преобразовать матрицу терминологического документа в корпус? не могли бы вы взглянуть на мой вопрос? Ошибка stackoverflow.com/questions/67376045 / спасибо! - person Noob; 05.05.2021

Вы должны преобразовать corpus в plaintextdocument.

myCorpus <- tm_map(myCorpus, PlainTextDocument)
person shank    schedule 03.11.2016

Другой вариант:

df <- as.data.frame(as.matrix(myCorpus))
person Rajesh Gupta    schedule 24.04.2017