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