Несколько месяцев назад я написал статью про бота определяющего болезни кошек. За это время я сделал несколько улучшений и создал еще одного бота, но уже для собак. Ссылка на бота для кошек Бот для определения болезни кошек / Хабр (habr.com)

Бот может по симптомам определить болезнь собаки. Всего в списке есть 32 болезни. Это и заболевания внутренних органов, и опорно-двигательной системы и так же банальная чумка и бешенство.

Принцип работы бота - бот отправляет вам симптом а вы нажимаете на кнопочку Да/Нет. В конце опроса появляется статистика какие заболевания могут быть у вашего котика и какие симптомы есть у этого заболевания.

Так же если вам надоело отвечать на вопросы, то есть кнопка "Завершить тест". При нажатие кнопки бот отправит вам результат опроса, где будут учтены ваши ответы, но тогда диагноз станет менее точнее, ведь не все симптомы будут проверены. Это одно из нововведений.

Другое нововведение - это уменьшение количества вопросов за счет группировки симптомов по группам, что позволило сократить количество вопросов в 5-7 раз.

Так же добавлена процентовка, которая показывает на сколько процентов пройден опрос и как долго еще осталось.

Ниже приведен код сердца моей программы, а именно сам алгоритм перебора и учета ответов пользователя. Суть вкратце - получает ответы и проверяет повторяемость симптомов. Так же выдает новый симптом из массива для отправки пользователю. При окончание симптомов готовит ответ для пользователя о болезнях собаки.

        self.str_off.update({self.mass[self.first_row][self.first_col]: "Was"})
        exit_for = 0
        if self.go_column == 0:
            for self.first_row in range(self.first_row, self.heigth):
                for col in range(1, self.width):
                        if self.mass[self.first_row][col] != '':
                            phrase = self.mass[self.first_row][col]

                            if self.quest_off.get(phrase) != None:
                                if self.quest_off.get(phrase) == "Да"  and self.str_off.get("Was"): 
                                    self.cnt_positive[self.first_row] += 1
                                    
                                elif self.quest_off.get(phrase) == "Нет"  and self.str_off.get("Was"):
                                    self.cnt_negative[self.first_row] += 1
                            else:
                                self.first_row = self.first_row
                                self.first_col = col
                                exit_for = 1
                                break
                if exit_for:
                    break
                self.first_col = 1
        else:
            for self.first_col in range(self.first_col, self.width + 1):

                if self.first_col == self.width:
                    #print("Перебранны все болезни")
                    sick_cnt = 0
                    str_out = '\nМы проверили все симптомы. Ниже приведенна вероятность болезни котика:\n'
                    for i in range(1,self.heigth):
                        if self.cnt_positive[i] > 0:
                            sick_cnt = sick_cnt + 1
                            str_out += "\n\n{0} -{1:9.1f}% \n".format(self.mass[i][0], self.cnt_positive[i]/self.calc_simptom_in_row(i) * 100 )

                            str_out += "Связанные с этой болезнью симптомы:\n "
                            for z in range(1,self.width):
                                if self.mass[i][z] != '':
                                    str_out += self.mass[i][z] + ";\n"

                    if sick_cnt > 0:
                        return str_out
                    else:
                        return "Кошка здорова"

Ну и внешний вид бота

Бот написан на Python 3.10. Базы данных для его реализации не используется. Все работает простым перебором в цикле. Для бота я использовал библиотеку telebot. Общее затраченное время - 3 недели. Боты крутятся на VPS серваке. Все трудности в процессе написания кода решались при помощи дебагера.

Ссылка на бота для собак:

Ссылки на бота для кошек:

Комментарии (2)


  1. Boilerplate
    26.10.2022 20:33
    +1

    А бот учитывает только совпадение признаков, или учитывает также вероятность самого заболевания? А то условно можно на "чихает" поставить 33% - простуда, 33% - туберкулез, 33% - чума.


    1. vyatkh1
      26.10.2022 22:14

      А 1% куда пропал? И да комменты на статью про бота котиков как-бы намекают (я прогнал и тоже как бы намекаю). Мы таким в школе балова\лись (Экспертная система называлось).