Spaces:
Runtime error
Runtime error
File size: 3,619 Bytes
41632d5 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
# pip install streamlit,
# pip install pyngrok==4.1.1,
# pip install vaderSentiment,
# pip install transformers
import os
os.system('pip install --upgrade pip')
os.system('pip install textblob')
os.system('pip install vaderSentiment')
os.system('pip install transformers')
os.system('pip install numpy')
os.system('pip install scipy')
os.system('pip install streamlit')
os.system('pip install pandas')
os.system('pip install altair')
os.system('pip install vaderSentiment')
os.system('pip install torch')
os.system('pip install pyngrok')
os.system('pip install streamlit --upgrade')
import torch
import streamlit as st
from textblob import TextBlob
import pandas as pd
import altair as alt
from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
from transformers import AutoModelForSequenceClassification
from transformers import TFAutoModelForSequenceClassification
from transformers import AutoTokenizer, AutoConfig
import numpy as np
from scipy.special import softmax
import streamlit as st
# Requirements
model_path = f"MaryanneMuchai/twitter-finetuned-model"
tokenizer = AutoTokenizer.from_pretrained(model_path)
config = AutoConfig.from_pretrained(model_path)
model = AutoModelForSequenceClassification.from_pretrained(model_path)
# Preprocess text (username and link placeholders)
def preprocess(text):
new_text = []
for t in text.split(" "):
t = '@user' if t.startswith('@') and len(t) > 1 else t
t = 'http' if t.startswith('http') else t
new_text.append(t)
return " ".join(new_text)
def sentiment_analysis(text):
text = preprocess(text)
# PyTorch-based models
encoded_input = tokenizer(text, return_tensors='pt')
output = model(**encoded_input)
scores_ = output[0][0].detach().numpy()
scores_ = softmax(scores_)
# Format output dict of scores
labels = ['Negative', 'Neutral', 'Positive']
scores = {l:float(s) for (l,s) in zip(labels, scores_) }
return scores
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 main():
st.title("Sentiment Analysis NLP App")
st.subheader("Streamlit Projects")
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',
color='metric')
st.altair_chart(c,use_container_width=True)
with col2:
st.info("Token Sentiment")
token_sentiments = sentiment_analysis(raw_text)
st.write(token_sentiments)
else:
st.subheader("About")
if __name__ == '__main__':
main()
# Expose the app publicly using ngrok
# from pyngrok import ngrok
# public_url = ngrok.connect(port='8501')
# public_url
# !streamlit run --server.port 8501 Sentiment_Analysis.py
# !pip freeze > requirements.txt |