|
|
import streamlit as st |
|
|
import pandas as pd |
|
|
import re |
|
|
import tensorflow as tf |
|
|
import tensorflow_hub as tf_hub |
|
|
from nltk.corpus import stopwords |
|
|
from nltk.tokenize import word_tokenize |
|
|
from tensorflow.keras.models import load_model |
|
|
from Sastrawi.Stemmer.StemmerFactory import StemmerFactory |
|
|
import nltk |
|
|
|
|
|
|
|
|
nltk_data_dir = "/tmp/nltk_data" |
|
|
nltk.data.path.append(nltk_data_dir) |
|
|
|
|
|
|
|
|
nltk.download('stopwords', download_dir=nltk_data_dir) |
|
|
nltk.download('punkt_tab', download_dir=nltk_data_dir) |
|
|
|
|
|
|
|
|
model = tf.keras.models.load_model('src/model_final.keras', |
|
|
custom_objects={'KerasLayer': tf_hub.KerasLayer}) |
|
|
|
|
|
|
|
|
stpwds_id = list(set(stopwords.words('indonesian'))) |
|
|
stpwds_id.append('oh') |
|
|
|
|
|
|
|
|
stemmer = StemmerFactory().create_stemmer() |
|
|
|
|
|
|
|
|
|
|
|
def text_preprocessing(text): |
|
|
|
|
|
text = text.lower() |
|
|
|
|
|
|
|
|
text = re.sub("@[A-Za-z0-9_]+", " ", text) |
|
|
|
|
|
|
|
|
text = re.sub("#[A-Za-z0-9_]+", " ", text) |
|
|
|
|
|
|
|
|
text = re.sub(r"\\n", " ",text) |
|
|
|
|
|
|
|
|
text = text.strip() |
|
|
|
|
|
|
|
|
text = re.sub(r"http\S+", " ", text) |
|
|
text = re.sub(r"www.\S+", " ", text) |
|
|
|
|
|
|
|
|
text = re.sub("[^A-Za-z\s']", " ", text) |
|
|
|
|
|
|
|
|
tokens = word_tokenize(text) |
|
|
|
|
|
|
|
|
tokens = [word for word in tokens if word not in stpwds_id] |
|
|
|
|
|
|
|
|
tokens = [stemmer.stem(word) for word in tokens] |
|
|
|
|
|
|
|
|
text = ' '.join(tokens) |
|
|
|
|
|
return text |
|
|
|
|
|
hub_layer = tf_hub.KerasLayer( |
|
|
"https://www.kaggle.com/models/google/nnlm/TensorFlow2/id-dim128-with-normalization/1", |
|
|
input_shape=[], |
|
|
dtype=tf.string, |
|
|
trainable=False |
|
|
) |
|
|
|
|
|
st.title('Sentiment Analysis App') |
|
|
|
|
|
|
|
|
user_input = st.text_area("Enter the text for sentiment analysis:") |
|
|
|
|
|
if st.button('Analyze'): |
|
|
if user_input: |
|
|
|
|
|
processed_text = text_preprocessing(user_input) |
|
|
data_inf = hub_layer([processed_text]) |
|
|
prediction = model.predict(data_inf) |
|
|
sentiment = "Positive" if prediction[0] > 0.5 else "Negative" |
|
|
|
|
|
|
|
|
st.write(f"Sentiment: {sentiment}") |
|
|
else: |
|
|
st.write("Please enter some text.") |