Spaces:
Sleeping
Sleeping
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.") |