|
import pandas as pd |
|
import numpy as np |
|
import streamlit as st |
|
import altair as alt |
|
|
|
from textblob import TextBlob |
|
from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer |
|
|
|
|
|
def convert_to_df(sentiment): |
|
sentiment_dict = {"polarity":sentiment.polarity,"subjectivity":sentiment.subjectivity} |
|
sentiment_df = pd.DataFrame(sentiment_dict.items(),columns=["metric","value"]) |
|
return sentiment_df |
|
|
|
def analyze_token_sentiment(docx): |
|
analyzer = SentimentIntensityAnalyzer() |
|
pos_list = [] |
|
neg_list = [] |
|
neu_list = [] |
|
for i in docx.split(): |
|
res = analyzer.polarity_scores(i)["compound"] |
|
if res >= 0.1: |
|
pos_list.append(i) |
|
pos_list.append(res) |
|
|
|
elif res <= -0.1: |
|
neg_list.append(i) |
|
neg_list.append(res) |
|
else: |
|
neu_list.append(i) |
|
|
|
result = {"positives":pos_list, "negatives":neg_list, "neutral":neu_list} |
|
return result |
|
|
|
def main(): |
|
st.title("Sentiment Analysis NLP App using Streamlit") |
|
st.subheader("Reformation Team Project") |
|
|
|
menu = ["Home","About"] |
|
choice = st.sidebar.selectbox("Menu",menu) |
|
|
|
if choice == "Home": |
|
st.subheader("Home") |
|
with st.form(key="nlpForm"): |
|
raw_text = st.text_area("Enter Text Here") |
|
submit_button = st.form_submit_button(label="Analyze") |
|
|
|
|
|
col1, col2 = st.columns(2) |
|
if submit_button: |
|
|
|
with col1: |
|
st.info("Results") |
|
sentiment = TextBlob(raw_text).sentiment |
|
st.write(sentiment) |
|
|
|
|
|
if sentiment.polarity > 0: |
|
st.markdown("Sentiment:: Positive :smiley: ") |
|
elif sentiment.polarity <0: |
|
st.markdown("Sentiment:: Negative :angry: ") |
|
else: |
|
st.markdown("Sentiment:: Neutral :๐: ") |
|
|
|
|
|
result_df = convert_to_df(sentiment) |
|
st.dataframe(result_df) |
|
|
|
|
|
c = alt.Chart(result_df).mark_bar().encode( |
|
x="metric", |
|
y="value", |
|
colour="metric") |
|
st.altair_chart(c,use_container_width=True) |
|
|
|
with col2: |
|
st.info("Token Sentiment") |
|
|
|
token_sentiments = analyze_token_sentiment(raw_text) |
|
st.write(token_sentiments) |
|
|
|
else: |
|
st.subheader("About") |
|
|
|
if __name__ == "__main__": |
|
main() |
|
|