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}%)')