|
library(shiny) |
|
library(readr) |
|
library(dplyr) |
|
library(sentimentr) |
|
library(tidytext) |
|
|
|
analyze_sentiment <- function(sentence) { |
|
sentence_df <- tibble(text = sentence) |
|
sentence_df <- unnest_tokens(sentence_df, input = text, output = word) |
|
nrc_sentiment <- sentiment(get_sentences(sentence_df), polarity_dt = lexicon::hash_sentiment_nrc, |
|
valence_shifters_dt = lexicon::hash_valence_shifters) |
|
|
|
return(nrc_sentiment) |
|
} |
|
|
|
ui <- fluidPage( |
|
titlePanel("Sentiment Analysis App"), |
|
sidebarLayout( |
|
sidebarPanel( |
|
textInput("sentence_input", "Enter a sentence:", ""), |
|
actionButton("analyze_button", "Analyze") |
|
), |
|
mainPanel( |
|
h4("Sentiment Score for the Whole Sentence:"), |
|
verbatimTextOutput("sentence_sentiment_output"), |
|
h4("Sentiment Score for Each Word:"), |
|
tableOutput("word_sentiment_output") |
|
) |
|
) |
|
) |
|
|
|
server <- function(input, output) { |
|
observeEvent(input$analyze_button, { |
|
sentence <- input$sentence_input |
|
sentiment_scores <- analyze_sentiment(sentence) |
|
|
|
|
|
sentence_sentiment <- mean(sentiment_scores$sentiment) |
|
sentence_sentiment_description <- ifelse(sentence_sentiment >= 0, "Positive", ifelse(sentence_sentiment == 0, "Neutral","Negative")) |
|
|
|
|
|
sentiment_scores$word_sentiment <- ifelse(sentiment_scores$sentiment > 0, "Positive", ifelse(sentiment_scores$sentiment == 0, "Neutral","Negative")) |
|
|
|
output$sentence_sentiment_output <- renderPrint(paste("Overall Sentiment:", sentence_sentiment_description)) |
|
output$word_sentiment_output <- renderTable(sentiment_scores) |
|
}) |
|
} |
|
|
|
shinyApp(ui, server) |
|
|
|
|
|
|