GerdBot / app.py
ariankhalfani's picture
Update app.py
2130a2a verified
import nltk
from nltk.chat.util import Chat, reflections
import gradio as gr
# Reflection to handle variations in user inputs
reflections = {
"aku": "kamu",
"saya": "Anda",
"kamu": "saya",
"Anda": "saya",
"adalah": "adalah",
}
# Define chatbot pairs
pairs = [
[
r"(hi|halo|hai|hello|hey)",
["Halo! Saya Nexus-Gerd-Bot. Bagaimana saya bisa membantu Anda hari ini?",]
],
[
r"siapa kamu\??",
["Saya adalah Nexus-Gerd-Bot, asisten virtual untuk membantu Anda menilai kemungkinan GERD.",]
],
[
r"bagaimana kabarmu\??",
["Saya baik-baik saja. Terima kasih sudah bertanya!",]
],
[
r"(.*)gerd(.*)",
["Saya bisa membantu menilai apakah Anda mungkin menderita GERD berdasarkan gejala yang Anda alami dalam 7 hari terakhir. Siapkah Anda untuk memulai?",]
],
[
r"(.*) (nyeri ulu hati|heartburn) (.*) ?",
["Berapa hari dalam 7 hari terakhir Anda mengalami nyeri ulu hati?",]
],
[
r"(.*) (regurgitasi) (.*) ?",
["Berapa hari dalam 7 hari terakhir Anda mengalami regurgitasi?",]
],
[
r"(.*) (mual) (.*) ?",
["Berapa hari dalam 7 hari terakhir Anda mengalami mual?",]
],
[
r"(.*) (sulit tidur) (.*) ?",
["Berapa hari dalam 7 hari terakhir Anda mengalami kesulitan tidur karena nyeri ulu hati?",]
],
[
r"(.*) (minum obat) (.*) ?",
["Berapa hari dalam 7 hari terakhir Anda minum obat tambahan untuk nyeri ulu hati?",]
],
[
r"terima kasih(.*)",
["Sama-sama! Jika Anda membutuhkan bantuan lebih lanjut, jangan ragu untuk bertanya.",]
],
[
r"selamat tinggal|dadah|sampai jumpa",
["Sampai jumpa! Semoga hari Anda menyenangkan!",]
],
]
# Create a Chat object
chatbot = Chat(pairs, reflections)
# Function to convert days to score
def days_to_score(days):
if days == 0:
return 0
elif days == 1:
return 1
elif 2 <= days <= 3:
return 2
elif 4 <= days <= 7:
return 3
else:
return 0 # This case should not happen as the input sliders are restricted
# Function to diagnose GERD based on input days
def diagnose_gerd_responses(responses):
scores = [days_to_score(d) for d in responses]
total_score = sum(scores)
if total_score <= 7:
diagnosis = "Kemungkinan Anda tidak menderita GERD."
elif 8 <= total_score <= 18:
diagnosis = "Kemungkinan Anda menderita GERD. Konsultasikan dengan penyedia layanan kesehatan untuk evaluasi lebih lanjut."
else:
diagnosis = "Skor di luar jangkauan. Pastikan Anda memasukkan nilai dengan benar."
return diagnosis
# Function to handle chatbot responses and collect inputs
def chatbot_interface(user_input, state):
responses = state or []
if len(responses) < 6:
response = chatbot.respond(user_input)
responses.append(int(user_input))
return response, responses
else:
diagnosis = diagnose_gerd_responses(responses)
return diagnosis, responses
# Define the Gradio interface
interface = gr.Interface(
fn=chatbot_interface,
inputs=[gr.Textbox(lines=2, placeholder="Masukkan pesan Anda di sini..."), gr.State()],
outputs=[gr.Textbox(label="Nexus-Gerd-Bot"), gr.State()],
title="Nexus-Gerd-Bot",
description="Chat dengan Nexus-Gerd-Bot untuk menilai kemungkinan GERD berdasarkan gejala yang Anda alami dalam 7 hari terakhir."
)
# Launch the app
if __name__ == "__main__":
interface.launch()