2014-12-06 32 views
0

通常当主题建模我用线沿线的东西:[R主题建模避免create_matrix

matrix <- create_matrix(cbind(as.vector(lda_data)), language="english", removeNumbers=TRUE, weighting=weightTf) 
k <- 20 #Hardcoded temp value 
lda <- LDA(matrix, k, method = "Gibbs", control = list(iter = 1000, burnin = 1000)) 
Terms <- terms(lda, 20) 

但是随着中型数据集(320万行)我得到以下错误计算矩阵:

Warning message: 
In nr * nc : NAs produced by integer overflow 
Error in as.matrix(textColumns) : 
    error in evaluating the argument 'x' in selecting a method for function 'as.matrix': Error in vector(typeof(x$v), nr * nc) : vector size cannot be NA 

是否有避免此错误的不同库/方法? (该代码可以在小数据集上正常工作)

或者,当使用TermDocumentMatrix作为LDA的矩阵时,我的结果术语完全是数字,是否有一种方法可以改为字符串(单词)?

+0

不知道如何解决中的R是paritcular问题,但如果你坚持,你可以尝试使用不同的主题建模应用程序。如果你知道Java看看Mallet,如果你知道Python看Gensim。还有由C语言编写的C原始LDA实现。 – MrFancypants 2014-12-08 17:48:56

回答

0

我用另一种方法来创建其对大数据集的作品矩阵:

dtm <- DocumentTermMatrix(donation_message, 
          control = list(stemming = TRUE, stopwords = TRUE, 
          removeNumbers = TRUE, removePunctuation = TRUE)) 

dtm <- removeSparseTerms(dtm, 0.99) 
rowTotals <- apply(dtm , 1, sum) #Find the sum of words in each Document 
dtm <- dtm[rowTotals> 0, ] #Remove all docs without words 

k <- 20 #Hardcoded temp value 
lda <- LDA(dtm, k, method = "Gibbs", control = list(iter = 1000, burnin = 1000)) #seed = 1000, thin = 100 
Terms <- terms(lda, 20) 
+0

这种方法通过消除矩阵的信息来简化矩阵的大小。例如,通过'dtm < - removeSparseTerms(dtm,0.99)'去除稀疏项。它不能解决OP的问题,如果他们想要一个矩阵并且不想求助于去除稀疏词,停止词等(即大量信息丢失)。 – timothyjgraham 2016-11-30 00:14:55