Мой DocumentTermMatrix сводится к нулю столбцов

train <- read.delim('train.tsv', header= T, fileEncoding= "windows-1252",stringsAsFactors=F)

Train.tsv содержит 1,56,060 строк текста с 4 именами столбцов Phrase, PhraseID, SentenceID и Sentiment(в масштабе от 0 до 4). Столбец Phrase содержит текстовые строки. (Пакет Tm уже загружен) Версия R: 3.1.2; ОС: Windows 7, 64 бит, 4 ГБ оперативной памяти.

> dput(head(train,6)) 
structure(list(PhraseId = 1:6, SentenceId = c(1L, 1L, 1L, 1L, 
1L, 1L), Phrase = c("A series of escapades demonstrating the adage that what is good for the goose is also good for the gander , some of which occasionally amuses but none of which amounts to much of a story .", 
"A series of escapades demonstrating the adage that what is good for the goose", 
"A series", "A", "series", "of escapades demonstrating the adage that what is good for the goose"
), Sentiment = c(1L, 2L, 2L, 2L, 2L, 2L)), .Names = c("PhraseId", 
"SentenceId", "Phrase", "Sentiment"), row.names = c(NA, 6L), class = "data.frame")

Это верхние 6 рядов железнодорожных документов.

clean_corpus <- function(corpus)
  {
   mycorpus <- tm_map(corpus, removeWords,stopwords("english"))  
   mycorpus <- tm_map(mycorpus, removeWords,c("movie","actor","actress"))  
   mycorpus <- tm_map(mycorpus, stripWhitespace)  
   mycorpus <- tm_map(mycorpus, tolower)  
   mycorpus <- tm_map(mycorpus, removeNumbers)
   mycorpus <- tm_map(mycorpus, removePunctuation)
   mycorpus <- tm_map(mycorpus, PlainTextDocument ) 
   return(mycorpus) 
}

# Build DTM
generateDTM <- function(df)
{
   m <- list(Sentiment = "Sentiment", Phrase = "Phrase")
   myReader <- readTabular(mapping = m)
   mycorpus <- Corpus(DataframeSource(df), readerControl = list(reader = myReader))

#Code to attach sentiment label with every text line
    for (i in 1:length(mycorpus)) 
     {
     attr(mycorpus[[i]], "Sentiment") <- df$Sentiment[i]
   }
   mycorpus <- clean_corpus(mycorpus)
   dtm <- DocumentTermMatrix(mycorpus)
   return(dtm)
}

dtm1 <- generateDTM(train) 

Здесь я сделал две функции. Один для очистки корпуса и другой для создания DTM (Document Term Matrix). Я также связал каждое значение настроения с каждой строкой текста. Теперь, когда я использую размеры dtm1; он показывает 156060 строк, но 0 столбцов.

Итак, как я могу сгенерировать DTM с прикрепленными ярлыками настроения?

1 ответ

Решение

Когда вы настраиваете свой читатель, вы хотите сопоставить что-то с "содержимым" документа, иначе он не знает, какой текст использовать для создания корпуса. Остальные значения хранятся в виде метаданных. Попробуйте изменить код на

m <- list(Sentiment = "Sentiment", content = "Phrase")
myReader <- readTabular(mapping = m)
mycorpus <- Corpus(DataframeSource(df), readerControl = list(reader = myReader))
Другие вопросы по тегам