fixdemo / app.py
isan2001's picture
Update app.py
fb3d137
raw
history blame
6.26 kB
import tensorflow as tf
from transformers import BertTokenizer
from transformers import TFBertForSequenceClassification
from Sastrawi.Stemmer.StemmerFactory import StemmerFactory # Import Sastrawi
import streamlit as st
import re
# Fungsi untuk memuat model BERT dan tokenizer
PRE_TRAINED_MODEL = 'indobenchmark/indobert-base-p2'
bert_tokenizer = BertTokenizer.from_pretrained(PRE_TRAINED_MODEL)
bert_model = TFBertForSequenceClassification.from_pretrained(PRE_TRAINED_MODEL, num_labels=2)
bert_model.load_weights('model.h5')
# Inisialisasi stemmer dari Sastrawi
stemmer = StemmerFactory().create_stemmer() # Membuat stemmer Sastrawi
def preprocess_text(text):
# Menggunakan Sastrawi untuk stemming
stemmed_text = stemmer.stem(text.lower())
stemmed_text = re.sub(r'\d+', '', stemmed_text) # Menghapus angka
stemmed_text = re.sub(r'\s+', ' ', stemmed_text) # Menghapus spasi berlebihan
stemmed_text = re.sub(r'[^\w\s]', '', stemmed_text)# Menghapus simbol dan tanda baca
stemmed_text = re.sub(r'[^\x00-\x7F]+', '', stemmed_text) # ascii
stopwords = ['dan', 'atau', 'juga', 'yang', 'untuk', 'karena', 'juga', 'tapi', 'yg', 'lg', 'ini', 'sih', 'saya', 'nih', 'ni', 'aku', 'ya', 'kami', 'lagi', 'udh', 'di', 'kita',
'terus', 'kok', 'jadi', 'tpi', 'tapi', 'sama', 'lain', 'sm', 'min', 'karna', 'ah', 'eh', 'oh', 'he','kamu', 'aku',
'diri', 'waduh', 'kan', 'itu', 'lalu', 'd', 'klo', 'pun', 'dr', 'nge', 'mah', 'ny',
'itu', 'dari', 'kite', 'yaa', 'si', 'lah', 'gua', 'gue', 'iki', 'wooii', 'woy',
'woi', 'gw', 'dari', 'bang', 'sya', 'ane', 'mulu', 'rb', 'org', 'oii', 'gtu', 'gya', 'nii', 'jga', 'duh', 'dah', 'deh', 'nang', 'p', 'cs' ,
'g', 'njii', 'lot', 'loh', 'x', 'lu', 'woe', 'yg', 'kak', 'aq', 'dong', 'kali', 'rill', 'wahh', 'trss', 'sya', 'dab', 'test', 'yok', 'kk',
'pak','rp', 'kok', 'kek', 'bosku', 'nya', 'bang', 'ka', 'gais', 'gih', 'oy', 'ki', 'ku', 'ke', 'ko', 'yah'
]
stemmed_text = ' '.join(word for word in stemmed_text.split() if word not in stopwords)
return stemmed_text
def predict_sentiment(text):
preprocessed_text = preprocess_text(text) # Pra-pemrosesan teks dengan Sastrawi
input_ids = tf.constant(bert_tokenizer.encode(preprocessed_text, add_special_tokens=True))[None, :]
logits = bert_model(input_ids)[0]
probabilities = tf.nn.softmax(logits, axis=1)
sentiment = tf.argmax(probabilities, axis=1)
return sentiment.numpy()[0], probabilities.numpy()[0]
menu = ["Home","Prediksi Analisis"]
choice = st.sidebar.selectbox("Menu", menu)
if choice == "Home":
st.title("Selamat datang di Prediksi Sentimen Aplikasi Dana di Intagram Menggunakan BERT")
st.write("Ini adalah aplikasi prediksi ulasan aplikasi Vidio menggunakan model Decision Tree. Aplikasi ini dapat memprediksi apakah ulasan aplikasi Vidio bersifat positif atau negatif berdasarkan teks yang dimasukkan.")
st.write("Ini adalah aplikasi prediksi ulasan aplikasi Vidio menggunakan model Decision Tree. Aplikasi ini dapat memprediksi apakah ulasan aplikasi Vidio bersifat positif atau negatif berdasarkan teks yang dimasukkan.")
st.write("Ini adalah aplikasi prediksi ulasan aplikasi Vidio menggunakan model Decision Tree. Aplikasi ini dapat memprediksi apakah ulasan aplikasi Vidio bersifat positif atau negatif berdasarkan teks yang dimasukkan.")
st.write("Ini adalah aplikasi prediksi ulasan aplikasi Vidio menggunakan model Decision Tree. Aplikasi ini dapat memprediksi apakah ulasan aplikasi Vidio bersifat positif atau negatif berdasarkan teks yang dimasukkan.")
st.write("Ini adalah aplikasi prediksi ulasan aplikasi Vidio menggunakan model Decision Tree. Aplikasi ini dapat memprediksi apakah ulasan aplikasi Vidio bersifat positif atau negatif berdasarkan teks yang dimasukkan.")
st.write("Ini adalah aplikasi prediksi ulasan aplikasi Vidio menggunakan model Decision Tree. Aplikasi ini dapat memprediksi apakah ulasan aplikasi Vidio bersifat positif atau negatif berdasarkan teks yang dimasukkan.")
st.write("Ini adalah aplikasi prediksi ulasan aplikasi Vidio menggunakan model Decision Tree. Aplikasi ini dapat memprediksi apakah ulasan aplikasi Vidio bersifat positif atau negatif berdasarkan teks yang dimasukkan.")
st.write("Ini adalah aplikasi prediksi ulasan aplikasi Vidio menggunakan model Decision Tree. Aplikasi ini dapat memprediksi apakah ulasan aplikasi Vidio bersifat positif atau negatif berdasarkan teks yang dimasukkan.")
st.write("Ini adalah aplikasi prediksi ulasan aplikasi Vidio menggunakan model Decision Tree. Aplikasi ini dapat memprediksi apakah ulasan aplikasi Vidio bersifat positif atau negatif berdasarkan teks yang dimasukkan.")
st.write("Ini adalah aplikasi prediksi ulasan aplikasi Vidio menggunakan model Decision Tree. Aplikasi ini dapat memprediksi apakah ulasan aplikasi Vidio bersifat positif atau negatif berdasarkan teks yang dimasukkan.")
st.write("Ini adalah aplikasi prediksi ulasan aplikasi Vidio menggunakan model Decision Tree. Aplikasi ini dapat memprediksi apakah ulasan aplikasi Vidio bersifat positif atau negatif berdasarkan teks yang dimasukkan.")
st.write("Ini adalah aplikasi prediksi ulasan aplikasi Vidio menggunakan model Decision Tree. Aplikasi ini dapat memprediksi apakah ulasan aplikasi Vidio bersifat positif atau negatif berdasarkan teks yang dimasukkan.")
st.write()
elif choice == "Prediksi Analisis":
st.title('Prediksi Sentimen menggunakan BERT')
# Input teks
text = st.text_area('Masukkan teks', '')
# Tombol untuk memprediksi sentimen
if st.button('Prediksi'):
if text.strip() == '':
st.warning('Masukkan teks terlebih dahulu.')
else:
sentiment, probabilities = predict_sentiment(text)
# Menghitung persentase probabilitas sentimen positif
positive_probability = probabilities[1] * 100
negative_probability = probabilities[0] * 100
st.write(f'HASIL PREDIKSI')
if sentiment == 0:
st.write(f'Negatif ({negative_probability:.2f}%)')
else:
st.write(f'Positif ({positive_probability:.2f}%)')