Я бы рекомендовал использовать класс dgCMatrix
для вашего DTM. Он поставляется с R как часть широко используемого пакета Matrix
, работает с topicmodels::LDA
и многими другими пакетами НЛП (textmineR
, text2vec
, tidytext
, et c.), Имеет методы, которые позволяют вы работаете с ним, как если бы это была плотная матрица.
library(tm)
library(topicmodels)
library(Matrix)
# grab a character vector of text. Your source may be different
text <- textmineR::nih_sample$ABSTRACT_TEXT
text_corpus <- SimpleCorpus(VectorSource(text))
text_dtm <- DocumentTermMatrix(text_corpus,
control = list(tolower=TRUE,
removePunctuation = TRUE,
removeNumbers= TRUE,
stopwords = TRUE,
sparse=TRUE))
text_dtm2 <- cast_sparse(text_dtm)
text_dtm2 <- Matrix::sparseMatrix(i=text_dtm$i,
j=text_dtm$j,
x=text_dtm$v,
dims=c(text_dtm$nrow, text_dtm$ncol),
dimnames = text_dtm$dimnames)
doc_lengths <- Matrix::rowSums(text_dtm2)
text_dtm3 <- text_dtm2[doc_lengths > 0, ]
text_lda <- LDA(text_dtm3, k = 2, method = "VEM", control = NULL)