def decide_process(text):
    print("\nDEBUG> ------------ DECIDE PROCESS --------------")
    # PROSES
    stopwords = get_stopword('file/konjungsi_info.csv')
    contents = tokenizing(text)
    filters = filtering(contents, stopwords)
    stems = stemming(filters)
    sinonim = get_sinonim(stems)

    stopword_info_list = ["apa", "kenapa", "mengapa", "bagaimana", "obat", "sebab", "solusi", "gejala", "komplikasi", "cegah"]
    stop_list = [word for word in stopword_info_list if word in sinonim]

    for stop in stop_list:
        sinonim.remove(stop)
    if "sakit" in sinonim:
        sinonim.remove("sakit")
    if "demam" in sinonim:
        sinonim.remove("demam")

    print("DEBUG> sinonim baru = ", sinonim)
    print("DEBUG> stop_list = ", stop_list)

    daftar_gejala, id_gejala, nama_gejala = get_symptoms(conn, sinonim)
    print("DEBUG> daftar gejala", daftar_gejala)
    print("DEBUG> panjang gejala : ", len(daftar_gejala))

    daftar_penyakit = []
    for i in sinonim:
        cursor.execute("SELECT id_penyakit, nama_penyakit FROM penyakit WHERE nama_penyakit LIKE '%" + i + "%'")
        daftar_penyakit.append(cursor.fetchall())

    daftar_penyakit = [e for e in daftar_penyakit if e]  # list of tuple to list and not empty
    print("DEBUG> daftar penyakit", daftar_penyakit)

    if len(stop_list) != 0 :

        print("DEBUG> ------------ END DECIDE PROCESS --------------\n")

        if len(stop_list) >= 1:
            if len(daftar_penyakit) == 0 and len(daftar_gejala) < 2:
                return "informasi"
            elif len(daftar_penyakit) > 0 and len(daftar_gejala) < 2:
                return "informasi"
            else:
                return "konsultasi"
        else:
            return "informasi"

    else:
        if len(sinonim) == 1 and "tidak" in sinonim:
            return "konsultasi"
        elif len(daftar_penyakit) == 0 and len(daftar_gejala) < 2:
            return "konsultasi"
        elif len(daftar_penyakit) > 0 and len(daftar_gejala) < 2:
            return "informasi"
        else:
            return "konsultasi"
def get_info(text):
    stopwords = get_stopword('file/konjungsi_info.csv')
    contents = tokenizing(text)
    filters = filtering(contents, stopwords)
    stems = stemming(filters)
    sinonim = get_sinonim(stems)
    conn = create_connection()
    cursor = conn.cursor()


    penyakit = []

    sinonim_untuk_gejala = copy.deepcopy(sinonim)

    # remove
    stopword_info_list = ["apa", "mengapa", "bagaimana", "obat", "sebab", "solusi", "gejala", "komplikasi", "cegah"]
    stop_list = [word for word in stopword_info_list if word in sinonim_untuk_gejala]

    for stop in stop_list:
        sinonim_untuk_gejala.remove(stop)
    if "sakit" in sinonim_untuk_gejala:
        sinonim_untuk_gejala.remove("sakit")

    

    for i in sinonim_untuk_gejala:
        cursor.execute("SELECT id_penyakit, nama_penyakit FROM penyakit WHERE nama_penyakit LIKE '%" + i + "%'")
        penyakit.append(cursor.fetchall())


    arr_penyakit = [e for e in penyakit if e]  # list of tuple to list and not empty

    # if len(arr_penyakit) == 0:
    #     messages = check_greeting(sinonim)

    #     return sinonim, arr_penyakit, messages

    print("DEBUG> arr_penyakit = ", arr_penyakit)
    if len(arr_penyakit) != 0:
        penyakit_max = penyakit_count(arr_penyakit, sinonim)
        result = get_keywoard(sinonim, penyakit_max, conn)
    else:
        result = [[("Nama penyakit tidak dicantumkan. Silahkan menyertakan nama penyakit dan informasi yang ingin diketahui",)]]

    return sinonim, arr_penyakit, result
    # dapatkan argumen cmd, contoh: python app_local_bot.py "saya merasa mual muntah"
    args = sys.argv
    if len(args) == 1:
        # text = "saya mual, muntah, bintik merah pada kulit, nyeri untuk melirik"
        # text = "demam tinggi,mata tidak merah, batuk darah, mata berair, tidak bisa tidur, kepala tidak sakit, sensitif terhadap cahaya"
        # text  = "Saya merasa mual dan kepala serasa berputar, saya sakit apa?"
        text = "mag"
    else:
        text = args[1]

    conn = create_connection()
    cursor = conn.cursor()

    stopwords = get_stopword('file/konjungsi_info.csv')
    contents = tokenizing(text)
    filters = filtering(contents, stopwords)
    stems = stemming(filters)
    sinonim = get_sinonim(stems)

    # dapatkan gejala
    # gejalas = []
    # for sin in sinonim:
    #     cursor.execute("SELECT * FROM gejala WHERE nama_gejala LIKE '%" + sin + "%'")
    #     gejalas = [[r[0], r[1]]  for r in cursor.fetchall()]

    # print(gejalas)

    # daftar_penyakits = []
    # for gejala in gejalas:
    #     print(gejala)
Exemple #4
0
def message_bot(user_id, name_user, salam, text, time, conn):
    msg_penyakit = "Kemungkinan Anda terkena penyakit "
    msg_pengobatan = "\n\n#Pengobatan \nPertolongan pertama yang bisa dilakukan adalah "
    msg_pencegahan = "\n#Pencegahan \nPencegahan yang bisa dilakukan adalah "
    msg_peringatan = "Silahkan menghubungi dokter untuk mendapatkan informasi dan penanganan yang lebih baik"

    message = ""
    timestamp = tm.time()
    penyakit_result = ""
    definisi_result = ""
    disease = ""

    cursor = conn.cursor()

    if text.lower() == 'tidak':
        kondisi_gejala = 'ada'
        sinonim = []
    else:
        stopwords = get_stopword('file/konjungsi.csv')
        contents = tokenizing(text)
        filters = filtering(contents, stopwords)
        stems = stemming(filters)
        sinonim = get_sinonim(stems)
        hapus_kata_sakit(sinonim)

        if len(sinonim) <= 2:
            gabung_sinonim = ' '.join(sinonim)

            if gabung_sinonim == 'selamat pagi' or gabung_sinonim == 'selamat malam' or gabung_sinonim == 'pagi' or gabung_sinonim == 'malam':
                greeting = check_greeting(sinonim)
                disease_id = 0
                save_history(user_id, name_user, text, greeting, "",
                             disease_id, time, conn)
                return greeting

        symp_db, symptoms, input = get_symptoms(conn, sinonim)
        kondisi_gejala = cek_total_gejala(symp_db)
        jml_penyakit, penyakit = cek_total_penyakit(conn, sinonim)

        cursor.execute(
            "SELECT DISTINCT input_user, time FROM gejala_input WHERE user_id = '"
            + user_id + "'")
        get_time = cursor.fetchall()

        if get_time:
            timestamp_now = tm.time() - float(get_time[0][1])

            if timestamp_now >= 3600:
                cursor.execute("DELETE FROM gejala_input WHERE user_id = '" +
                               user_id + "'")
                conn.commit()
                print("hapus gejala expired")

    # jika gejala kosong maka tampilkan pesan
    if kondisi_gejala == "kosong":
        # print("INFO> gejala kosong")
        disease_id = 0
        # print("DEBUG> jumlah penyakit = ", jml_penyakit)
        if jml_penyakit == 0:
            disease = check_greeting(sinonim)
        elif jml_penyakit > 0:
            for pnykt in penyakit:
                disease = disease + pnykt[0][2] + "\n\n"

        message = message + str(disease)
        save_history(user_id, name_user, text, message, "", disease_id, time,
                     conn)

    # jika gejalanya kurang
    elif kondisi_gejala == "kurang":
        # print("INFO> gejala kurang")

        input_to_sinonim = ",".join(input)
        # print("DEBUG> Sinonim disimpan ke tabel (gejala input) = ", input_to_sinonim)
        save_input(user_id, name_user, symp_db, input_to_sinonim, timestamp,
                   conn)

        cursor.execute("SELECT COUNT (*) FROM gejala_input WHERE user_id = '" +
                       user_id + "'")
        count_input = cursor.fetchall()

        if count_input[0][0] <= 3:
            message = message + "Apakah ada gejala lain ?\n\nGejala yang anda masukkan kurang. Masukkan minimal 4 gejala agar mendapatkan hasil yang akurat. \n\n Atau jawab TIDAK jika tidak ada gejala yang ingin ditambahkan."
            disease_id = 0
            save_history(user_id, name_user, input_to_sinonim, message, "",
                         disease_id, time, conn)

        else:
            cursor.execute(
                "SELECT nama_gejala FROM gejala_input WHERE user_id = '" +
                user_id + "'")
            gejala_db = cursor.fetchall()
            # print("DEBUG> Kurang | Gejala di DB = ", gejala_db)
            gejala = [i[0].split(',') for i in gejala_db]
            gejala_flat = flat(gejala)
            # print("DEBUG> Kurang | Gejala yang digabung = ", gejala_flat)
            result, cf = get_cf(conn, gejala_flat)

            # jika yang terdeteksi hanya 1 penyakit
            if len(result) == 1:
                for output in result:
                    message = message + salam + name_user + "\n" \
                              + msg_penyakit + output[0][1] + "\n" + output[0][2] \
                              + msg_pengobatan + output[0][4] + "\n" \
                              + msg_pencegahan + output[0][5] + "\n\n" \
                              + (str(output[0][6]) + "\n\n" if output[0][6] is not None else '') \
                              + msg_peringatan

                output_sistem = msg_penyakit + result[0][0][1]
                disease_id = result[0][0][0]
                save_history(user_id, name_user, text, output_sistem, "",
                             disease_id, time, conn)

            # jika yang terdeteksi lebih dari 1 penyakit
            else:
                for idx in result:
                    penyakit_result = penyakit_result + " , " + idx[0][1]
                    definisi_result = definisi_result + "\n\n" + idx[0][2]

                message = message + salam + name_user + "\n" + msg_penyakit + penyakit_result + "\n" + definisi_result + "\n\n" + msg_peringatan
                output_sistem = msg_penyakit + penyakit_result

                for dis in result:
                    disease_id = dis[0][0]
                    save_history(user_id, name_user, text, output_sistem, "",
                                 disease_id, time, conn)

            cursor.execute("DELETE FROM gejala_input WHERE user_id = '" +
                           user_id + "'")
            conn.commit()

    # setelah sukses hapus yang ada di db
    elif kondisi_gejala == "ada":
        # print("INFO> gejala cukup")
        cursor.execute(
            "SELECT DISTINCT input_user, time FROM gejala_input WHERE user_id = '"
            + user_id + "'")
        gejala_db = cursor.fetchall()

        # print("DEBUG> Cukup | Gejala di DB = ", gejala_db)

        if not gejala_db:
            if len(sinonim) == 0:
                disease = check_greeting(sinonim)
                message = message + str(disease)
                return message
            else:
                result, cf = get_cf(conn, sinonim)
                # untuk mendapatkan daftar string gejala
                print(
                    "\n----------proses dibawah ini untuk daftar gejala yang disimpan ke histroy------------"
                )
                symp_db, symptoms, input = get_symptoms(conn, sinonim)
                string_gejala = ', '.join([symp[0][1] for symp in symp_db])
                print(
                    "-------------------------selesai-------------------------\n"
                )

        else:
            gejala = [i[0].split(',') for i in gejala_db]
            gejala_flat = flat(gejala)
            # print("DEBUG> Cukup | Gejala yang digabung = ", gejala_flat)
            gejala_new2 = sinonim + gejala_flat
            # print("DEBUG> Cukup | Gejala yang digabung + kalimat sebelum = ", gejala_new2)

            # untuk mendapatkan daftar string gejala
            # print("\n----------proses dibawah ini untuk daftar gejala yang disimpan ke histroy------------")
            symp_db, symptoms, input = get_symptoms(conn, gejala_new2)
            string_gejala = ', '.join([symp[0][1] for symp in symp_db])
            # print("-------------------------selesai-------------------------\n")

            if len(symp_db) <= 1:
                disease_id = 0
                output_sistem = "Maaf data kurang akurat. Sistem tidak bisa memberikan diagnosa.\nSilahkan masukkan keluhan Anda kembali."
                save_history(user_id, name_user, text, output_sistem,
                             string_gejala, disease_id, time, conn)
                cursor.execute("DELETE FROM gejala_input WHERE user_id = '" +
                               user_id + "'")
                conn.commit()
                return salam + name_user + "\n" + output_sistem
            else:
                result, cf = get_cf(conn, gejala_new2)

            cursor.execute("DELETE FROM gejala_input WHERE user_id = '" +
                           user_id + "'")
            conn.commit()

        # jika yang terdeteksi hanya 1 penyakit
        if len(result) == 1:
            for output in result:
                message = message + salam + name_user + "\n" \
                          + msg_penyakit + output[0][1] + "\n" + output[0][2] \
                          + msg_pengobatan + output[0][4] + "\n" \
                          + msg_pencegahan + output[0][5] + "\n\n" \
                          + (str(output[0][6]) + "\n\n" if output[0][6] is not None else '') \
                          + msg_peringatan

            output_sistem = msg_penyakit + result[0][0][1]
            disease_id = result[0][0][0]
            save_history(user_id, name_user, text, output_sistem,
                         string_gejala, disease_id, time, conn)

        # jika yang terdeteksi lebih dari 1 penyakit
        else:
            for idx in result:
                # print("DEBUG> Penyakit lebih > 1 | Penyakit = ", idx)
                penyakit_result = penyakit_result + " , " + idx[0][1]
                definisi_result = definisi_result + "\n\n" + idx[0][2]

            message = message + salam + name_user + "\n" + msg_penyakit + penyakit_result + "\n" + definisi_result + "\n\n" + msg_peringatan
            output_sistem = msg_penyakit + penyakit_result

            for dis in result:
                disease_id = dis[0][0]
                save_history(user_id, name_user, text, output_sistem,
                             string_gejala, disease_id, time, conn)

    return message