Update app.py
Browse files
app.py
CHANGED
|
@@ -3,6 +3,7 @@ from transformers import BertTokenizer
|
|
| 3 |
from transformers import TFBertForSequenceClassification
|
| 4 |
from Sastrawi.Stemmer.StemmerFactory import StemmerFactory # Import Sastrawi
|
| 5 |
import streamlit as st
|
|
|
|
| 6 |
|
| 7 |
# Fungsi untuk memuat model BERT dan tokenizer
|
| 8 |
PRE_TRAINED_MODEL = 'indobenchmark/indobert-base-p2'
|
|
@@ -16,7 +17,20 @@ stemmer = StemmerFactory().create_stemmer() # Membuat stemmer Sastrawi
|
|
| 16 |
def preprocess_text(text):
|
| 17 |
# Menggunakan Sastrawi untuk stemming
|
| 18 |
stemmed_text = stemmer.stem(text.lower())
|
|
|
|
|
|
|
|
|
|
|
|
|
| 19 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 20 |
return stemmed_text
|
| 21 |
|
| 22 |
def predict_sentiment(text):
|
|
@@ -27,24 +41,43 @@ def predict_sentiment(text):
|
|
| 27 |
sentiment = tf.argmax(probabilities, axis=1)
|
| 28 |
return sentiment.numpy()[0], probabilities.numpy()[0]
|
| 29 |
|
| 30 |
-
|
| 31 |
-
st.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 32 |
|
| 33 |
# Input teks
|
| 34 |
-
text = st.text_area('Masukkan teks', '')
|
| 35 |
|
| 36 |
# Tombol untuk memprediksi sentimen
|
| 37 |
-
if st.button('Prediksi'):
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
else:
|
| 41 |
-
sentiment, probabilities = predict_sentiment(text)
|
| 42 |
-
|
| 43 |
-
# Menghitung persentase probabilitas sentimen positif
|
| 44 |
-
positive_probability = probabilities[1] * 100
|
| 45 |
-
negative_probability = probabilities[0] * 100
|
| 46 |
-
st.write(f'HASIL PREDIKSI')
|
| 47 |
-
if sentiment == 0:
|
| 48 |
-
st.write(f'Negatif ({negative_probability:.2f}%)')
|
| 49 |
else:
|
| 50 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3 |
from transformers import TFBertForSequenceClassification
|
| 4 |
from Sastrawi.Stemmer.StemmerFactory import StemmerFactory # Import Sastrawi
|
| 5 |
import streamlit as st
|
| 6 |
+
import re
|
| 7 |
|
| 8 |
# Fungsi untuk memuat model BERT dan tokenizer
|
| 9 |
PRE_TRAINED_MODEL = 'indobenchmark/indobert-base-p2'
|
|
|
|
| 17 |
def preprocess_text(text):
|
| 18 |
# Menggunakan Sastrawi untuk stemming
|
| 19 |
stemmed_text = stemmer.stem(text.lower())
|
| 20 |
+
stemmed_text = re.sub(r'\d+', '', stemmed_text) # Menghapus angka
|
| 21 |
+
stemmed_text = re.sub(r'\s+', ' ', stemmed_text) # Menghapus spasi berlebihan
|
| 22 |
+
stemmed_text = re.sub(r'[^\w\s]', '', stemmed_text)# Menghapus simbol dan tanda baca
|
| 23 |
+
stemmed_text = re.sub(r'[^\x00-\x7F]+', '', stemmed_text) # ascii
|
| 24 |
|
| 25 |
+
stopwords = ['dan', 'atau', 'juga', 'yang', 'untuk', 'karena', 'juga', 'tapi', 'yg', 'lg', 'ini', 'sih', 'saya', 'nih', 'ni', 'aku', 'ya', 'kami', 'lagi', 'udh', 'di', 'kita',
|
| 26 |
+
'terus', 'kok', 'jadi', 'tpi', 'tapi', 'sama', 'lain', 'sm', 'min', 'karna', 'ah', 'eh', 'oh', 'he','kamu', 'aku',
|
| 27 |
+
'diri', 'waduh', 'kan', 'itu', 'lalu', 'd', 'klo', 'pun', 'dr', 'nge', 'mah', 'ny',
|
| 28 |
+
'itu', 'dari', 'kite', 'yaa', 'si', 'lah', 'gua', 'gue', 'iki', 'wooii', 'woy',
|
| 29 |
+
'woi', 'gw', 'dari', 'bang', 'sya', 'ane', 'mulu', 'rb', 'org', 'oii', 'gtu', 'gya', 'nii', 'jga', 'duh', 'dah', 'deh', 'nang', 'p', 'cs' ,
|
| 30 |
+
'g', 'njii', 'lot', 'loh', 'x', 'lu', 'woe', 'yg', 'kak', 'aq', 'dong', 'kali', 'rill', 'wahh', 'trss', 'sya', 'dab', 'test', 'yok', 'kk',
|
| 31 |
+
'pak','rp', 'kok', 'kek', 'bosku', 'nya', 'bang', 'ka', 'gais', 'gih', 'oy', 'ki', 'ku', 'ke', 'ko', 'yah'
|
| 32 |
+
]
|
| 33 |
+
stemmed_text = ' '.join(word for word in stemmed_text.split() if word not in stopwords)
|
| 34 |
return stemmed_text
|
| 35 |
|
| 36 |
def predict_sentiment(text):
|
|
|
|
| 41 |
sentiment = tf.argmax(probabilities, axis=1)
|
| 42 |
return sentiment.numpy()[0], probabilities.numpy()[0]
|
| 43 |
|
| 44 |
+
menu = ["Home","Prediksi Analisis"]
|
| 45 |
+
choice = st.sidebar.selectbox("Menu", menu)
|
| 46 |
+
|
| 47 |
+
|
| 48 |
+
if choice == "Home":
|
| 49 |
+
st.title("Selamat datang di Prediksi Sentimen Aplikasi Dana di Intagram Menggunakan BERT")
|
| 50 |
+
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.")
|
| 51 |
+
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.")
|
| 52 |
+
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.")
|
| 53 |
+
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.")
|
| 54 |
+
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.")
|
| 55 |
+
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.")
|
| 56 |
+
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.")
|
| 57 |
+
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.")
|
| 58 |
+
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.")
|
| 59 |
+
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.")
|
| 60 |
+
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.")
|
| 61 |
+
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.")
|
| 62 |
+
st.write()
|
| 63 |
+
elif choice == "Prediksi Analisis":
|
| 64 |
+
st.title('Prediksi Sentimen menggunakan BERT')
|
| 65 |
|
| 66 |
# Input teks
|
| 67 |
+
text = st.text_area('Masukkan teks', '')
|
| 68 |
|
| 69 |
# Tombol untuk memprediksi sentimen
|
| 70 |
+
if st.button('Prediksi'):
|
| 71 |
+
if text.strip() == '':
|
| 72 |
+
st.warning('Masukkan teks terlebih dahulu.')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 73 |
else:
|
| 74 |
+
sentiment, probabilities = predict_sentiment(text)
|
| 75 |
+
|
| 76 |
+
# Menghitung persentase probabilitas sentimen positif
|
| 77 |
+
positive_probability = probabilities[1] * 100
|
| 78 |
+
negative_probability = probabilities[0] * 100
|
| 79 |
+
st.write(f'HASIL PREDIKSI')
|
| 80 |
+
if sentiment == 0:
|
| 81 |
+
st.write(f'Negatif ({negative_probability:.2f}%)')
|
| 82 |
+
else:
|
| 83 |
+
st.write(f'Positif ({positive_probability:.2f}%)')
|