faruqaziz's picture
Update app.py
cd8d630 verified
raw
history blame
3.28 kB
import streamlit as st
from transformers import pipeline
import nltk
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
nltk.download('punkt')
nltk.download("stopwords")
# Buat objek terjemahan
translator = pipeline("translation", model="Helsinki-NLP/opus-mt-id-en")
terjemahkan = pipeline("translation", model="Helsinki-NLP/opus-mt-en-id")
# Menggunakan pipa untuk klasifikasi diagnosis penyakit
disease_classifier = pipeline("text-classification", model="BenK10/disease-diagnosis")
# Pipeline generasi teks dengan format pesan
text_generation = pipeline("text-generation", model="SumayyaAli/tiny-llama-1.1b-chat-medical")
def preprocess_text(teks):
# Pra-pemrosesan teks menggunakan NLTK
tokens = word_tokenize(teks)
tokens = [token for token in tokens if token.isalnum()] # Menghapus kata bukan alfanumerik
tokens = [token for token in tokens if token.lower() not in stopwords.words("indonesian")] # Menghapus stopword
preprocessed_text = " ".join(tokens)
return preprocessed_text
def predict_disease(gejala):
try:
# Pra-pemrosesan teks gejala
gejala_diproses = preprocess_text(gejala)
# Melakukan terjemahan
terjemahan = translator(gejala_diproses, max_length=100)
terjemahan_inggris = terjemahan[0]["translation_text"]
# Klasifikasi diagnosis penyakit dengan fitur tambahan
klasifikasi = disease_classifier(terjemahan_inggris)
# Mengembalikan diagnosis dan skor kepercayaan
diagnosis = klasifikasi[0]["label"]
kepercayaan = klasifikasi[0]["score"]
# Menggunakan format pesan untuk definisi penyakit
definisi = text_generation([{"role": "user", "content": f"What is {diagnosis}?"}])
definisi_teks = definisi[0]['generated_text']
# Melakukan terjemahan definisi kembali ke bahasa Indonesia
terjemahan_definisi = terjemahkan(definisi_teks, max_length=100)
definisi = terjemahan_definisi[0]["translation_text"]
return diagnosis, kepercayaan, definisi
except Exception as e:
return "Tidak dapat mendiagnosis", 0.0, "Terjadi kesalahan saat mendiagnosis penyakit."
# Halaman Streamlit
st.title("Diagnosis Penyakit")
with st.form("diagnosis_form"):
# Masukan gejala
gejala = st.text_area("Masukkan gejala Anda:", "")
# Masukan usia
usia = st.number_input("Masukkan usia Anda:", min_value=0, max_value=120)
# Masukan jenis kelamin
jenis_kelamin_pilihan = ["Laki-laki", "Perempuan"]
jenis_kelamin = st.selectbox("Masukkan jenis kelamin Anda:", jenis_kelamin_pilihan)
# Memanggil fungsi prediksi ketika tombol ditekan
submitted = st.form_submit_button("Diagnosis")
# Memanggil fungsi prediksi
if submitted:
if gejala and usia and jenis_kelamin:
diagnosis, kepercayaan, definisi = predict_disease(gejala)
if diagnosis != "Tidak dapat mendiagnosis":
st.success(f"Diagnosis: {diagnosis}")
st.write(f"Dengan tingkat akurasi: {kepercayaan:.2f}")
st.write(f"{definisi}")
else:
st.error(definisi)
else:
st.error("Harap isi semua kolom sebelum menekan tombol Diagnosis.")