Взятие объекта скрытого семантического анализа (lsa) и оценка новых данных в R - PullRequest
0 голосов
/ 08 февраля 2019

Я выполняю скрытый семантический анализ (LSA) с использованием textmineR в R. То, что я надеюсь получить, это документ по матрице тем с оценками тем по документам, что я могу сделать, вызвав theta из моего объекта lsa (ниже),Тем не менее, я сталкиваюсь с трудностями, когда беру свой созданный объект lsa и использую его для оценки нового набора данных (т. Е. Матрицы терминов документа, dtm), чтобы я мог применить свои ранее существующие тематические структуры к новым данным.В приведенном ниже примере я создаю две темы, а затем, когда я пытаюсь использовать один и тот же точный DTM (делая вид, что это новый файл ради этого примера), я получаю следующую ошибку:

"Error in predict.lsa_topic_model(model, dtm_m) : newdata must be a matrix of class dgCMatrix or a numeric vector"

Мне нужно использовать объект lsa для оценки нового текста.Есть ли простое исправление, которое я пропускаю?Мне не повезло, что матрица была приведена к dgCMatrix.Я на самом деле не знаю, как это сделать с другими пакетами, такими как lsa либо.Любая помощь в этом подходе будет принята с благодарностью.

file = as.data.frame(matrix( c('case1', 'this is some SAMPLE TEXT!',
'case2',  'and this is the 2nd version of that text...', 
'case3', 'more stuff to talk about'), 
        nrow=3,              
        ncol=2,              
        byrow = TRUE))
names(file) [1] <- 'doc_id'
names(file) [2] <- 'text'

library(tm)
wordCorpus <- Corpus(DataframeSource(file))

cleaner <- function (wordCorpus) {
  wordCorpus <- tm_map(wordCorpus, removeNumbers)
  wordCorpus <- tm_map(wordCorpus, content_transformer(tolower))
  wordCorpus <- tm_map(wordCorpus, removePunctuation)
  return (wordCorpus)
}
wordCorpus <- cleaner (wordCorpus)

tokenizer <- function(x) 
  NGramTokenizer(x, Weka_control(min = 1, max = 2))
dtm  <- DocumentTermMatrix (wordCorpus, control = list (tokenize=tokenizer, weighting = weightTfIdf))
dtm_m <- as.matrix(dtm)

library(textmineR)
model <- FitLsaModel(dtm = dtm_m,  k = 2)

#this is what I want to get, but ideally also 
#be able to save the "model" object and use to create this in a new sample`

values <- as.data.frame (model$theta)
values
#pretending my original dataset is a new sample and using predict
values_other <- predict (model, dtm_m)
...