sample_sentiment_analysis / src /streamlit_app.py
rachman's picture
Update src/streamlit_app.py
6711c73 verified
Raw History Blame Contribute Delete
2.07 kB
import streamlit as st
import pandas as pd
import re
import tensorflow as tf
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
from tensorflow.keras.models import load_model
import nltk
# Use /tmp for NLTK data (writable in Hugging Face Spaces)
nltk_data_dir = "/tmp/nltk_data"
nltk.data.path.append(nltk_data_dir)
# Download the stopwords and punkt resources
nltk.download('stopwords', download_dir=nltk_data_dir)
nltk.download('punkt', download_dir=nltk_data_dir)
# Load the trained model
model = load_model('src/model.keras')
# Load stopwords
stpwds_id = list(set(stopwords.words('english')))
# Text preprocessing function
def text_preprocessing(text):
# Case folding
text = text.lower()
# Mention removal
text = re.sub("@[A-Za-z0-9_]+", " ", text)
# Hashtags removal
text = re.sub("#[A-Za-z0-9_]+", " ", text)
# Newline removal (\n)
text = re.sub(r"\\n", " ",text)
# Whitespace removal
text = text.strip()
# URL removal
text = re.sub(r"http\S+", " ", text)
text = re.sub(r"www.\S+", " ", text)
# Non-letter removal (such as emoticons, symbols, etc.)
text = re.sub("[^A-Za-z\s']", " ", text)
# Tokenization
tokens = word_tokenize(text)
# Stopwords removal
tokens = [word for word in tokens if word not in stpwds_id]
# Combining Tokens
text = ' '.join(tokens)
return text
# Define the Streamlit interface
st.title('Sentiment Analysis App')
# Get user input
user_input = st.text_area("Enter the text for sentiment analysis:")
if st.button('Analyze'):
if user_input:
# Preprocess the input text
processed_text = text_preprocessing(user_input)
prediction = model.predict([[processed_text]])
sentiment = "Positive" if prediction[0] > 0.5 else "Negative"
# Display the result
st.write(f"Sentiment: {sentiment}")
else:
st.write("Please enter some text.")