# Install packages (run once)
install.packages("tm")
install.packages("topicmodels")
install.packages("SnowballC")

# Load libraries
library(tm)
library(topicmodels)
library(SnowballC)

# Load data
data <- read.csv("DisneylandReviews.csv", stringsAsFactors = FALSE)

# Auto-detect text column
text_col <- names(data)[1]
text_data <- na.omit(data[[text_col]])

# Create Corpus
corpus <- Corpus(VectorSource(text_data))

# Preprocessing
corpus <- tm_map(corpus, content_transformer(tolower))
corpus <- tm_map(corpus, removeNumbers)
corpus <- tm_map(corpus, removePunctuation)
corpus <- tm_map(corpus, removeWords, stopwords("english"))
corpus <- tm_map(corpus, removeWords,
                 c("the","and","is","in","to","of","for","on","with"))
corpus <- tm_map(corpus, stemDocument)
corpus <- tm_map(corpus, stripWhitespace)

# DTM
dtm <- DocumentTermMatrix(corpus)
dtm <- removeSparseTerms(dtm, 0.99)
dtm <- dtm[rowSums(as.matrix(dtm)) > 0, ]

# LDA
k <- 3
lda <- LDA(dtm, k = k, method = "VEM")

# Output
cat("Topics:", k, "\n\n")
print(terms(lda, 10))
print(topics(lda))
print(posterior(lda)$topics)