取得潜在的语义分析(lsa)对象并根据R

时间:2019-02-08 15:34:09

标签: r nlp predict lsa

我正在R中使用textmineR运行潜在语义分析(LSA)。我希望获得的是按主题矩阵排列的文档,以及按文档划分的主题分数,我可以通过从lsa对象中调用theta来实现(如下所示) 。但是,我遇到了挑战,要使用创建的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)

1 个答案:

答案 0 :(得分:0)

对于这样的工作流程,您可以完全完全跳过使用tm的操作,而直接使用textmineR的{​​{1}}函数。

将LSA示例作为CreateDtm插图的一部分,其中显示了此确切的工作流程。 https://cran.r-project.org/web/packages/textmineR/vignettes/c_topic_modeling.html