2016-02-08 3 views
1

Моя задача состоит в том, чтобы применить LDA на наборе амазонских обзоров и получить 50 темкак сделать LDA в R

Я извлекаемые текст обзора в векторе, и теперь я пытаюсь применить LDA

Я создал ЦМР

matrix <- create_matrix(dat, language="english", removeStopwords=TRUE, stemWords=FALSE, stripWhitespace=TRUE, toLower=TRUE) 

<<DocumentTermMatrix (documents: 100000, terms: 174632)>> 
Non-/sparse entries: 4096244/17459103756 
Sparsity   : 100% 
Maximal term length: 218 
Weighting   : term frequency (tf) 

, но когда я пытаюсь сделать это, я получаю следующее сообщение об ошибке:

lda <- LDA(matrix, 30)

Error in LDA(matrix, 30) : 
    Each row of the input matrix needs to contain at least one non-zero entry 

Искал некоторые решения и используется хлопнул в

matrix1 <- rollup(matrix, 2, na.rm=TRUE, FUN = sum) 

все еще получает ту же ошибку

Я очень новый для этого кто-то может мне помочь или предложить мне ссылку для изучения о this.It будет очень полезно

Там нет пустых строк в моей исходной матрицы и содержит только один столбец, который содержит отзывы

+0

Возможный дубликат [Удалить пустые документы из DocumentTermMatrix в R topicmodels?] (Http://stackoverflow.com/questions/13944252/remove-empty-documents-from-documenttermmatrix-in-r-topicmodels) – scoa

+0

по существу, сообщение об ошибке сообщает вам, что som e документов пуст. Вы должны удалить те – scoa

+0

В моей исходной матрице нет пустых строк. После этого, когда я делаю DTM, а затем запускаю LDA, он дает мне ошибку –

ответ

1

я был назначен с родственниками d аналогичной задачи, я также изучаю и делаю, я несколько разработал, поэтому я делюсь своим фрагментом кода, я надеюсь, что это поможет.

library("topicmodels") 
library("tm") 

func<-function(input){ 

x<-c("I like to eat broccoli and bananas.", 
     "I ate a banana and spinach smoothie for breakfast.", 

"Chinchillas and kittens are cute.", 
"My sister adopted a kitten yesterday.", 
"Look at this cute hamster munching on a piece of broccoli.") 



#whole file is lowercased 
#text<-tolower(x) 

#deleting all common words from the text 
#text2<-setdiff(text,stopwords("english")) 

#splitting the text into vectors where each vector is a word.. 
#text3<-strsplit(text2," ") 

# Generating a structured text i.e. Corpus 
docs<-Corpus(VectorSource(x)) 

создания трансформаторов контента, то есть функции, которые будут использоваться для изменения объектов в R ..

toSpace <- content_transformer(function (x , pattern) gsub(pattern, " ", x)) 

#Removing all the special charecters.. 

docs <- tm_map(docs, toSpace, "/") 
docs <- tm_map(docs, toSpace, "@") 
docs <- tm_map(docs, toSpace, "\\|") 
docs <- tm_map(docs, removeNumbers) 

# Remove english common stopwords 
docs <- tm_map(docs, removeWords, stopwords("english")) 

# Remove punctuations 
docs <- tm_map(docs, removePunctuation) 

# Eliminate extra white spaces 
docs <- tm_map(docs, stripWhitespace) 

docs<-tm_map(docs,removeWords,c("\t"," ","")) 

dtm<- TermDocumentMatrix(docs, control = list(removePunctuation = TRUE, stopwords=TRUE)) 

    #print(dtm) 


freq<-colSums(as.matrix(dtm)) 

print(names(freq)) 


ord<-order(freq,decreasing=TRUE) 

write.csv(freq[ord],"word_freq.csv") 

Настройка параметров для LDA

 burnin<-4000 
     iter<-2000 
     thin<-500 
     seed<-list(2003,5,63,100001,765) 
     nstart<-5 
     best<-TRUE 

     #Number of Topics 
     k<-3 

# Docs to topics  
    ldaOut<-LDA(dtm,k,method="Gibbs",control=list(nstart=nstart,seed=seed,best=best,burnin=burnin,iter=iter,thin=thin)) 

    ldaOut.topics<-as.matrix(topics(ldaOut)) 
    write.csv(ldaOut.topics,file=paste("LDAGibbs",k,"DocsToTopics.csv")) 
Смежные вопросы