covid / covid_tweets.py
eric2013's picture
Upload 4 files
4886417
raw
history blame
2.58 kB
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
# Functions
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")
#layout
col1, col2 = st.columns(2)
if submit_button:
with col1:
st.info("Results")
sentiment = TextBlob(raw_text).sentiment
st.write(sentiment)
#Emoji
if sentiment.polarity > 0:
st.markdown("Sentiment:: Positive :smiley: ")
elif sentiment.polarity <0:
st.markdown("Sentiment:: Negative :angry: ")
else:
st.markdown("Sentiment:: Neutral :๐Ÿ˜: ")
# Dataframe
result_df = convert_to_df(sentiment)
st.dataframe(result_df)
# Visualization
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()