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()