restyaaa's picture
Update app.py
36d3247 verified
import pickle
import numpy as np
from gensim.models import KeyedVectors
import gradio as gr
# Memuat model FastText pretrained dari file .vec (contoh path: cc.id.300.vec)
fasttext_model = KeyedVectors.load_word2vec_format(
'cc.id.300.vec', binary=False
)
# Memuat model KNN dan SVM yang sudah dioptimalkan (pastikan file pickle ada)
with open('KNN+GridSearch.pkl', 'rb') as f:
knn_model = pickle.load(f)
with open('SVM+GridSearch.pkl', 'rb') as f:
svm_model = pickle.load(f)
# Fungsi untuk mendapatkan vektor kalimat dari FastText
def get_fasttext_vector(text):
# Tokenisasi teks menjadi kata-kata
words = text.split()
# Ambil vektor dari setiap kata menggunakan model FastText
word_vectors = [fasttext_model[word] for word in words if word in fasttext_model]
# Jika ada kata-kata yang ada dalam model, kita rata-ratakan vektor-vektor tersebut
if len(word_vectors) > 0:
return np.mean(word_vectors, axis=0)
else:
# Jika tidak ada kata yang cocok, return vektor nol (kosong)
return np.zeros(fasttext_model.vector_size)
# Fungsi prediksi untuk model KNN
def predict_sentiment_knn(text):
vector = get_fasttext_vector(text) # Mengambil vektor kalimat
sentiment = knn_model.predict([vector]) # Prediksi menggunakan KNN
return sentiment[0][0]
# Fungsi prediksi untuk model SVM
def predict_sentiment_svm(text):
vector = get_fasttext_vector(text) # Mengambil vektor kalimat
sentiment = svm_model.predict([vector]) # Prediksi menggunakan SVM
return sentiment[0]
# Fungsi umum untuk memilih model (KNN atau SVM)
def predict_sentiment(text, model_type='KNN'):
if model_type == 'KNN':
return predict_sentiment_knn(text)
else:
return predict_sentiment_svm(text)
# Membuat antarmuka Gradio
gr.Interface(
fn=predict_sentiment, # Fungsi yang dipanggil untuk prediksi
inputs=[
gr.inputs.Textbox(label="Masukkan Teks untuk Analisis Sentimen"), # Input teks
gr.inputs.Radio(['KNN', 'SVM'], label="Pilih Model") # Pilih model prediksi
],
outputs="text" # Output berupa teks (hasil prediksi)
).launch()