| | 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.") |