Fadhel Ijlal Falah
∙26 March 2024
Flask, sebuah framework web mikro untuk Python, telah menjadi pilihan populer untuk membangun aplikasi web ringan dan API. Seiring dengan kemajuan teknologi Machine Learning (ML), kini kita dapat mengintegrasikan model ML ke dalam API menggunakan Flask. Artikel ini akan memberikan panduan langkah demi langkah dalam membuat API dengan Flask yang mengkonsumsi model ML.
Flask adalah framework web Python yang sederhana, ringan, dan mudah digunakan. Dikenal sebagai "micro" karena dirancang untuk menjadi minimalis dan memungkinkan pengembang untuk memilih dan mengintegrasikan komponen sesuai kebutuhan proyek. Flask memberikan keleluasaan dalam membangun aplikasi web dari yang sederhana hingga kompleks.
API adalah sekumpulan aturan dan alat komunikasi antara dua atau lebih perangkat lunak. Dalam konteks web, API digunakan untuk memungkinkan berbagai aplikasi berkomunikasi dan berbagi data. API memungkinkan integrasi yang mulus antara berbagai sistem dan platform.
Sebelum kita memulai, penting untuk memahami empat metode dasar yang umum digunakan dalam pengembangan API: GET, POST, DELETE, dan PUT.
Metode ini digunakan untuk mengambil data dari server. Misalnya, jika Anda memiliki API endpoint "/users" dengan metode GET, permintaan ke endpoint tersebut akan mengembalikan daftar pengguna.
Metode POST digunakan untuk mengirim data baru ke server. Jika Anda memiliki API endpoint "/users" dengan metode POST, Anda dapat membuat pengguna baru dengan mengirim data pengguna dalam permintaan.
Metode DELETE digunakan untuk menghapus data dari server. Misalnya, dengan API endpoint "/users/{id}" dengan metode DELETE, Anda dapat menghapus pengguna berdasarkan ID.
Metode PUT digunakan untuk memperbarui data yang sudah ada di server. Jika Anda memiliki API endpoint "/users/{id}" dengan metode PUT, Anda dapat memperbarui informasi pengguna berdasarkan ID.
Pastikan Anda telah menginstal Flask. Jika belum, gunakan perintah pip berikut:
pip install flask
Pastikan Anda memiliki model yang telah dilatih dan disimpan dalam format pickle. Gantilah 'model.pkl' dengan model Anda dan pastikan struktur direktori proyek Anda sesuai.
Buat file preprocessing.py yang berisi implementasi kelas Preprocessing untuk melakukan tahap-tahap preprocessing pada teks.
import re import pandas as pd from string import punctuation from Sastrawi.Stemmer.StemmerFactory import StemmerFactory
class Preprocessing : def init(self): print("Initializing preprocessing...") self.factory = StemmerFactory() self.stemmer = self.factory.create_stemmer() pass
def processtext(self, text): text = text.lower() text = re.sub(r'&\w*;', '', text) text = re.sub('@[^\s]+','',text) text = re.sub(r'$\w*', '', text) text = text.lower() text = re.sub(r'https?://./\w', '', text) text = re.sub(r'#\w*', '', text) text = re.sub(r'[' + punctuation.replace('@', '') + ']+', ' ', text) text = re.sub(r'\b\w{1,2}\b', '', text) text = re.sub(r'\s\s+', ' ', text) text = text.lstrip(' ') text = ''.join(c for c in text if c <= '\uFFFF') return text
def stem(self, text): text = self.stemmer.stem(text) return text
def remove_stopwords(self, param): f = "id_stopwords.txt" with open(f, 'r') as my_stopwords: stopwords_list = my_stopwords.read() list = param.split() index = [] i = 0 d = "" while i < len(list): if list[i] not in stopwords_list: index.append(i) i += 1 for k in index: d += list[k]+" " #s = ' '.join(list) return d.strip()
def init(self): print("Initializing preprocessing...") self.factory = StemmerFactory() self.stemmer = self.factory.create_stemmer()
def processtext(self, text): text = text.lower() text = re.sub(r'&\w*;', '', text) text = re.sub('@[^\s]+','',text) text = re.sub(r'$\w*', '', text) text = text.lower() text = re.sub(r'https?://./\w', '', text) text = re.sub(r'#\w*', '', text) text = re.sub(r'[' + punctuation.replace('@', '') + ']+', ' ', text) text = re.sub(r'\b\w{1,2}\b', '', text) text = re.sub(r'\s\s+', ' ', text) text = text.lstrip(' ') text = ''.join(c for c in text if c <= '\uFFFF') return text
def stem(self, text): text = self.stemmer.stem(text) return text
def remove_stopwords(self, param): f = "id_stopwords.txt" with open(f, 'r') as my_stopwords: stopwords_list = my_stopwords.read() list = param.split() index = [] i = 0 d = "" while i < len(list): if list[i] not in stopwords_list: index.append(i) i += 1 for k in index: d += list[k]+" " return d.strip()
isi file app.py dengan implementasi API Flask.
from flask import Flask, request, jsonify, make_response from preprocessing import Preprocessing import pickle
app = Flask(name)
response = { 'status': 200, 'msg': 'success', 'data': [] }
@app.post('/predict') def predict(): try: # Lakukan prediksi menggunakan model ML filename = 'model.pkl' model = pickle.load(open(filename, 'rb')) dp = Preprocessing() data = request.get_json() value = dp.stem(data['text']) value = dp.remove_stopwords(value) h = model.predict([value]) if not h[0]: response['data'] = 'Negatif review' else: response['data'] = 'Positif review' except Exception as e: response['status'] = 500 response['msg'] = str(e) return make_response(jsonify(response), 200)
if name == 'main': app.run(debug=True, port=3000)
from flask import Flask, request, jsonify, make_response from preprocessing import Preprocessing import pickle
app = Flask(name)
response = { 'status': 200, 'msg': 'success', 'data': [] }
@app.post('/predict') def predict():
try: # Lakukan prediksi menggunakan model ML filename = 'model.pkl' model = pickle.load(open(filename, 'rb')) dp = Preprocessing() data = request.get_json() value = dp.stem(data['text']) value = dp.remove_stopwords(value) h = model.predict([value]) if not h[0]: response['data'] = 'Negatif review' else: response['data'] = 'Positif review'
except Exception as e: response['status'] = 500 response['msg'] = str(e)
return make_response(jsonify(response), 200)
Jalankan aplikasi Flask dengan perintah berikut di terminal:
python app.py
API akan berjalan di http://127.0.0.1:3000/ secara default.
{ "text": "ini bagus sekali" }
Dengan langkah-langkah di atas, Anda telah berhasil membuat API Flask untuk melakukan analisis sentimen pada teks dan telah menguji fungsionalitasnya menggunakan Postman. Pastikan untuk mengganti payload JSON dengan teks yang ingin Anda uji untuk mendapatkan hasil prediksi sentimen. Selamat mencoba!
Untuk link project ini kalian dapat mengunduhnya melalui link github saya di sini.
bagikan
ARTIKEL TERKAIT
Hi!👋
Kamu bisa menghubungi kami via WhatsApp