Update app.py
Browse files
app.py
CHANGED
|
@@ -1,60 +1,60 @@
|
|
| 1 |
-
import pickle
|
| 2 |
-
import numpy as np
|
| 3 |
-
from gensim.models import KeyedVectors
|
| 4 |
-
import gradio as gr
|
| 5 |
-
|
| 6 |
-
# Memuat model FastText pretrained dari file .vec (contoh path: cc.id.300.vec)
|
| 7 |
-
fasttext_model = KeyedVectors.load_word2vec_format(
|
| 8 |
-
'
|
| 9 |
-
)
|
| 10 |
-
|
| 11 |
-
# Memuat model KNN dan SVM yang sudah dioptimalkan (pastikan file pickle ada)
|
| 12 |
-
with open('KNN+GridSearch.pkl', 'rb') as f:
|
| 13 |
-
knn_model = pickle.load(f)
|
| 14 |
-
|
| 15 |
-
with open('SVM+GridSearch.pkl', 'rb') as f:
|
| 16 |
-
svm_model = pickle.load(f)
|
| 17 |
-
|
| 18 |
-
# Fungsi untuk mendapatkan vektor kalimat dari FastText
|
| 19 |
-
def get_fasttext_vector(text):
|
| 20 |
-
# Tokenisasi teks menjadi kata-kata
|
| 21 |
-
words = text.split()
|
| 22 |
-
|
| 23 |
-
# Ambil vektor dari setiap kata menggunakan model FastText
|
| 24 |
-
word_vectors = [fasttext_model[word] for word in words if word in fasttext_model]
|
| 25 |
-
|
| 26 |
-
# Jika ada kata-kata yang ada dalam model, kita rata-ratakan vektor-vektor tersebut
|
| 27 |
-
if len(word_vectors) > 0:
|
| 28 |
-
return np.mean(word_vectors, axis=0)
|
| 29 |
-
else:
|
| 30 |
-
# Jika tidak ada kata yang cocok, return vektor nol (kosong)
|
| 31 |
-
return np.zeros(fasttext_model.vector_size)
|
| 32 |
-
|
| 33 |
-
# Fungsi prediksi untuk model KNN
|
| 34 |
-
def predict_sentiment_knn(text):
|
| 35 |
-
vector = get_fasttext_vector(text) # Mengambil vektor kalimat
|
| 36 |
-
sentiment = knn_model.predict([vector]) # Prediksi menggunakan KNN
|
| 37 |
-
return sentiment[0][0]
|
| 38 |
-
|
| 39 |
-
# Fungsi prediksi untuk model SVM
|
| 40 |
-
def predict_sentiment_svm(text):
|
| 41 |
-
vector = get_fasttext_vector(text) # Mengambil vektor kalimat
|
| 42 |
-
sentiment = svm_model.predict([vector]) # Prediksi menggunakan SVM
|
| 43 |
-
return sentiment[0]
|
| 44 |
-
|
| 45 |
-
# Fungsi umum untuk memilih model (KNN atau SVM)
|
| 46 |
-
def predict_sentiment(text, model_type='KNN'):
|
| 47 |
-
if model_type == 'KNN':
|
| 48 |
-
return predict_sentiment_knn(text)
|
| 49 |
-
else:
|
| 50 |
-
return predict_sentiment_svm(text)
|
| 51 |
-
|
| 52 |
-
# Membuat antarmuka Gradio
|
| 53 |
-
gr.Interface(
|
| 54 |
-
fn=predict_sentiment, # Fungsi yang dipanggil untuk prediksi
|
| 55 |
-
inputs=[
|
| 56 |
-
gr.inputs.Textbox(label="Masukkan Teks untuk Analisis Sentimen"), # Input teks
|
| 57 |
-
gr.inputs.Radio(['KNN', 'SVM'], label="Pilih Model") # Pilih model prediksi
|
| 58 |
-
],
|
| 59 |
-
outputs="text" # Output berupa teks (hasil prediksi)
|
| 60 |
-
).launch()
|
|
|
|
| 1 |
+
import pickle
|
| 2 |
+
import numpy as np
|
| 3 |
+
from gensim.models import KeyedVectors
|
| 4 |
+
import gradio as gr
|
| 5 |
+
|
| 6 |
+
# Memuat model FastText pretrained dari file .vec (contoh path: cc.id.300.vec)
|
| 7 |
+
fasttext_model = KeyedVectors.load_word2vec_format(
|
| 8 |
+
'cc.id.300.vec', binary=False
|
| 9 |
+
)
|
| 10 |
+
|
| 11 |
+
# Memuat model KNN dan SVM yang sudah dioptimalkan (pastikan file pickle ada)
|
| 12 |
+
with open('KNN+GridSearch.pkl', 'rb') as f:
|
| 13 |
+
knn_model = pickle.load(f)
|
| 14 |
+
|
| 15 |
+
with open('SVM+GridSearch.pkl', 'rb') as f:
|
| 16 |
+
svm_model = pickle.load(f)
|
| 17 |
+
|
| 18 |
+
# Fungsi untuk mendapatkan vektor kalimat dari FastText
|
| 19 |
+
def get_fasttext_vector(text):
|
| 20 |
+
# Tokenisasi teks menjadi kata-kata
|
| 21 |
+
words = text.split()
|
| 22 |
+
|
| 23 |
+
# Ambil vektor dari setiap kata menggunakan model FastText
|
| 24 |
+
word_vectors = [fasttext_model[word] for word in words if word in fasttext_model]
|
| 25 |
+
|
| 26 |
+
# Jika ada kata-kata yang ada dalam model, kita rata-ratakan vektor-vektor tersebut
|
| 27 |
+
if len(word_vectors) > 0:
|
| 28 |
+
return np.mean(word_vectors, axis=0)
|
| 29 |
+
else:
|
| 30 |
+
# Jika tidak ada kata yang cocok, return vektor nol (kosong)
|
| 31 |
+
return np.zeros(fasttext_model.vector_size)
|
| 32 |
+
|
| 33 |
+
# Fungsi prediksi untuk model KNN
|
| 34 |
+
def predict_sentiment_knn(text):
|
| 35 |
+
vector = get_fasttext_vector(text) # Mengambil vektor kalimat
|
| 36 |
+
sentiment = knn_model.predict([vector]) # Prediksi menggunakan KNN
|
| 37 |
+
return sentiment[0][0]
|
| 38 |
+
|
| 39 |
+
# Fungsi prediksi untuk model SVM
|
| 40 |
+
def predict_sentiment_svm(text):
|
| 41 |
+
vector = get_fasttext_vector(text) # Mengambil vektor kalimat
|
| 42 |
+
sentiment = svm_model.predict([vector]) # Prediksi menggunakan SVM
|
| 43 |
+
return sentiment[0]
|
| 44 |
+
|
| 45 |
+
# Fungsi umum untuk memilih model (KNN atau SVM)
|
| 46 |
+
def predict_sentiment(text, model_type='KNN'):
|
| 47 |
+
if model_type == 'KNN':
|
| 48 |
+
return predict_sentiment_knn(text)
|
| 49 |
+
else:
|
| 50 |
+
return predict_sentiment_svm(text)
|
| 51 |
+
|
| 52 |
+
# Membuat antarmuka Gradio
|
| 53 |
+
gr.Interface(
|
| 54 |
+
fn=predict_sentiment, # Fungsi yang dipanggil untuk prediksi
|
| 55 |
+
inputs=[
|
| 56 |
+
gr.inputs.Textbox(label="Masukkan Teks untuk Analisis Sentimen"), # Input teks
|
| 57 |
+
gr.inputs.Radio(['KNN', 'SVM'], label="Pilih Model") # Pilih model prediksi
|
| 58 |
+
],
|
| 59 |
+
outputs="text" # Output berupa teks (hasil prediksi)
|
| 60 |
+
).launch()
|