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