# Install packages (run once)
install.packages(c("tm","wordcloud","RColorBrewer","syuzhet"))

# Load libraries
library(tm)
library(wordcloud)
library(RColorBrewer)
library(syuzhet)

# 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]])

# Limit rows safely
text_data <- text_data[1:min(2000, length(text_data))]

# Convert encoding
text_data <- iconv(text_data, to = "UTF-8")

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

# Preprocessing
corpus <- tm_map(corpus, content_transformer(tolower))
corpus <- tm_map(corpus, removePunctuation)
corpus <- tm_map(corpus, removeNumbers)
corpus <- tm_map(corpus, removeWords, stopwords("english"))
corpus <- tm_map(corpus, stripWhitespace)

# Term matrix
tdm <- TermDocumentMatrix(corpus)
tdm <- removeSparseTerms(tdm, 0.99)

# Word frequencies
m <- as.matrix(tdm)
w <- sort(rowSums(m), decreasing = TRUE)

# Wordcloud
set.seed(222)
wordcloud(names(w), w, max.words=150, min.freq=5,
          random.order=FALSE, colors=brewer.pal(8,"Dark2"))

# Sentiment analysis
s <- get_nrc_sentiment(text_data)

# Output
print(head(s))

# Plot
barplot(colSums(s), las=2, col=rainbow(10),
        ylab="Count", main="Sentiment Analysis")