Методология создания экспертной системы для Telegram-Бота
Технология разработки экспертных систем. Реализация ЭС для мобильных приложений. Описание библиотеки Fysom, используемой для реализации данных, в виде конечного автомата. Работа коллбэков в Fysom. Интерфейс и тестирование Telegram бота "Робот-Юрист".
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 29.03.2022 |
Размер файла | 4,3 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Федеральное государственное автономное образовательное учреждение высшего образования
КАЗАНСКИЙ (ПРИВОЛЖСКИЙ) ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ
ВЫСШАЯ ШКОЛА ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ И ИНФОРМАЦИОННЫХ СИСТЕМ
Направление подготовки: 09.03.03 - Прикладная информатика
ВЫПУСКНАЯ КВАЛИФИКАЦИОННАЯ РАБОТА
Методология создания экспертной системы для Telegram-Бота
Студент группы 11-301 Валиахметов Э.И.
Казань - 2017 г.
Содержание
Введение
1. Введение в сферу защиты интеллектуальной собственности
1.1 Экспертные системы
2. Постановка задачи
2.1 Технология создания экспертных систем
2.2 Выбор технологий для реализации
2.3 Выбор технологий для использования
3. Выбор соответствующих модулей и библиотек на языке Python
3.1 Библиотека Time
3.2 Библиотека Fysom
3.3 pyTelegramApi
4. Реализация экспертной системы для бота
4.1 Этапы разработки
4.1.1 Telegram Бот
4.2 BotFather. Настройка бота
4.3 Подключение библиотеки ДКА Fysom
4.4 ApiTelegramBot
4.5 Технология добавления новых веток в КДА
5. Интерфейс и тестирование Telegram бота “Робот-Юрист”
Заключение
Список использованных источников
Приложение
Введение
При решении вопросов юридического характера возникает необходимость в получении экспертных юридических консультаций. При этом есть две стороны: потребитель консультации и консультирующее лицо. Физическому или юридическому лицу, обращающемуся за консультацией, требуется в удобном и доступном для него виде, быстро, качественно (с высокой долей уверенности) и недорого (всё вместе - в рамках ограниченности ресурсов) получить консультацию по юридическим вопросам. С другой стороны, консультант вынужден выделять время на проведение консультации. В следствие ограниченности физических возможностей, возможности консультирования ограничены. При увеличении объема обращений за консультациями может снизиться качество, для сокращения количества обращений может повыситься цена консультаций. Описанная проблема несоответствия возможностей консультанта потребностям консультируемого может эффективно решаться автоматизацией. При этом важно, чтобы автоматизированное решение было надежным (чтобы на его решения можно было опираться, чтобы оно было подкреплено ссылками на юридические документы, юридические статьи), предлагало удобный интерфейс для консультируемого (доступность, быстрое решение вопросов), возможность расширения возможностей по консультации для юристов.
Для автоматизации решений нам понадобиться экспертная система на основе баз знаний заранее проверенных самими юристами. В качестве пользовательского интерфейса подобрана технология на основе популярного мессенджера Telegram, в котором реализована возможность общения с роботами (далее ботами)
Задачи дипломной работы:
1. Подготовка всех технологий для реализации задачи.
2. Разработка и реализация всех библиотек и модулей.
3. Тестирование и обзор интерфейса.
4. Подготовка к выпуску продукта.
1. Введение в сферу защиты интеллектуальной собственности
Права на созданные изобретения, которые оформлены патентами, называют промышленными, а сам патент - промышленной собственностью (к ней можно отнести и другие объекты деятельности творчества в сфере производства).
Между собственностью и патентом существуют следующие признаки:
1. Собственнику, которому принадлежит патент, право пользования и распоряжение патентом;
2. Когда у патента, как и у любого товара, есть меновая стоимость;
3. Защита патента, как и любого имущества собственника, от посягательств со стороны других лиц.
Термин «промышленный» обозначает область применения которым охраняется патент. Однако этот термин не совсем точен, так как в законе прописано, что изобретением является объект, который используется не только в промышленности, но и в торговле, сельском хозяйстве, медицине.
Авторское право - часть гражданского законодательства, регулирующего отношения по использованию произведений науки, литературы и искусства.
Авторское право было введено в России по просьбе вдовы А.С. Пушкина как право наследования сроком на 50 лет.
Авторское право можно отнести к произведениям науки, литературы и искусства. Все это есть результаты творческой деятельности.
В наше время к объектам авторского права чаще всего относят программы для ЭВМ, базы данных и топологии интегральных микросхем. Вопросы авторского права поднимаются и представляют интерес обычно тогда, когда объекты интеллектуальной собственности создаются или используются в нарушение норм авторского права. Чтобы получить авторские права никакой регистрации не требуется. Срок действия авторского права по законодательству составляет всю жизнь автора и еще 50 лет после его смерти. При нарушении авторских прав в результате судебных заключений обычно осуществляется возмещение ущерба право владельцу.
Одна из ключевых особенностей правовой охраны программ для ЭВМ определяется с возможностью применить его как для авторского, так и для патентного права. Обычно стараются защитить структуру и концепцию программы от ее копирования, а также воспроизведения основных инструментов программы с целью продажи и копирования.
Помимо того, некоторая часть программы может иметь вполне в себе конкретное техническое значение. Это может определить ее патентоспособность с учетом ее применения для решения технических задач или в комплексе с другими инструментами, которые дают в сам объект признаки отличия этого изобретения.
В РФ охрана программ для ЭВМ обеспечена двумя актами:
1. Специальные законы для ЭВМ и Баз Данных;
2. Общий закон, который распространяется на авторское право.
База данных - объективная форма представления и организации каких-то данных, построенных таким образом, чтобы к ним был доступ программы ЭВМ для обработки запросов на основе этих данных.
Отношения, которые связаны с создание правовой охраны и использованием баз данных, регулируются Законом РФ “О правовой охране программ для ЭВМ и баз данных”. Любой желающий правообладатель может зарегистрировать базу данных и программу для ЭВМ, способом подачи в патентное ведомство.
В боте проекта “Робот-Юрист” будет представлена экспертная система, которая будет определять суть проблемы и его решение.
1.1 Экспертные системы
Экспемртная системма (ЭС, англ. expert system) -- компьютерная система, которая способна частично заменить эксперта-специалиста в разрешении какой-либо проблемы. Современные экспертные системы начали разрабатываться исследователями искусственного интеллекта в 1970-х годах, а в 1980-х получили коммерческое поддержание. Предшественники экспертных систем были предложены в 1832 году С.Н. Корсаковым, который создал механические устройства, так называемые «интеллектуальные машины», которые позволяли находить решения по конкретно-заданным условиям, например, определять наиболее подходящие лекарства по наблюдаемым у пациента симптомам заболевания.
В информационных технология экспертные системы рассматриваются вместе совместно с базами знания как модели поведения экспертов в выбранной области знаний, которые используют процедуры логического вывода и принятия решений, а базы знаний - как единая база фактов и правил логического вывода в определенной предметной области.
База знаний ЭС создаётся при помощи трёх групп людей:
1. Эксперты той проблемной области, к которой относятся задачи, решаемые ЭС (В нашем случае юристы);
2. Инженеры по знаниям, являющиеся специалистами по разработке ИИС;
3. Программисты, осуществляющие реализацию ЭС.
2. Постановка задачи
2.1 Технология создания экспертных систем
CLIPS (от англ. C Language Integrated Production System) -- программная среда для разработки экспертных систем. Синтаксис и название предложены Чарльзом Форги (Charles Forgy) в OPS (Official Production System). Первые версии CLIPS разрабатывались с 1984 года в Космическом центре Джонсона (Johnson Space Center), NASA (как альтернатива существовавшей тогда системе ART*Inference), пока в начале 1990-х не было приостановлено финансирование, и NASA вынудили купить коммерческие продукты.
CLIPS является продукционной системой. Реализация вывода использует алгоритм Rete.
Основная идея состоит в представлении знаний в виде такой формы (Рис. 2.1):
Рис. 2.1. Форма представления знаний
1.2 Выбор технологии для реализации
Для решения нашей задачи есть великое множество способов.
JavaScript - мультипарадигменный язык программирования, который поддерживает объектно-ориентированный, императивный и функциональные стили. JavaScript - реализация языка ECMAScript
JavaScript можно использовать как встраиваемый язык для программного доступа к объектам приложений, в нашем случае - Telegram Bot. Наиболее широко применяется в браузерах как язык сценариев для придания интерактивности веб-страницам.
Основные архитектурные черты: слабая типизация, динамическая типизация, автоматическое управление памятью, прототипное программирование, функции как объекты первого класса.
На JavaScript оказали влияние многие языки, при разработке была цель сделать язык похожим на Java, но при этом легким для использования для тех, кто не умеет программировать.
Языком JavaScript не владеет определенная компания или организация, что отличает его от ряда языков программирования, используемых в веб разработке.
PHP (/pi:.e?t?.pi:/ англ. PHP: Hypertext Preprocessor -- «PHP: препроцессор гипертекста»; первоначально Personal Home Page Tools -- «Инструменты для создания персональных веб-страниц») -- скриптовый язык общего назначения, применяющегося для разработки веб-приложений. В настоящее время поддерживается подавляющим большинством хостинг-провайдеров и является одним из лидеров среди языков, применяющихся для создания динамических веб-сайтов.
Язык и его интерпретатор (Zend Engine) разрабатываются группой энтузиастов в рамках проекта с открытым кодом. Проект распространяется под собственной лицензией, несовместимой с GNU GPL.
Python и Django фреймворки
Хочется отметить, что основные принципы как в Ruby, PHP совпадают.
Боты с людьми взаимодействуют на HTTP-запросах; для передачи данных используется JSON. Метод getUpdates возвращает список массив из объектов типа Update. Внутри Update находится объект Message. Для стандартного взаимодействия с ботом нас фактически интересует именно объект Message, у которого мы считываем атрибут text, хранящий в себе текст, переданный боту и объект chat, в котором лежит информация о пользователе, инициировавшем общение с нашим Telegram ботом. Также имеется параметр update_id, который служит в качестве offset параметра при вызове метода getUpdates. То есть update_id+1 вернёт все сообщения, поступившие после последнего update_id, при этом все предыдущие сообщения будут удалены.
1. Установка библиотеки очень проста.
2. Библиотека pyTelegramBotApi сам отвечает за все нюансы отправки и получения запросов, позволяет сосредоточиться конкретно на логике.
Перед установкой и запуском нужно установить WebHook на нужный адрес и поймать выходной сигнал. Это способствует возвращению поведения с выгрузкой событий вручную. Вся логика будет находиться в классе tornado.web.RequestHandler, который редактор принимает для обработки запросов.
После настройки, задаем пару стартовых команд для нашего бота, чтобы проверить его.
Телеграмм присылает полностью все сообщение. Необходимость ставить перед командами “/” создано лишь для того, чтобы пользователям было удобно. Это позволяет научить программу отвечать по-человечески. Для того чтобы дать ей возможность получать в группах все сообщения, нужно написать /setprivacy помощнику @BotFather, отключая, таким образом, приватность.
Далее в Handler нужно добавить обработчик, в список команд включить речь. Также отправленные сообщения могут быть не только текстовыми, к ним можно прикреплять медиафайлы.
После реализации простейших команд мы получаем полноценный бот, который может отвечать на запросы готовыми командами.
По сравнению с остальными языками Python показался для решения данной задачи наиболее удобным для меня. Так как в языке Python присутствует большой выбор библиотек, которые более для меня знакомы, и есть плюс в скорости написания. Если даже сравнить, как выглядит реализация на других языках, на языке Python более понятен синтаксис. Для Telegram бота я нашел все соответствующие модули и библиотеки, которые понадобятся мне в создании данного продукта.
2.3 Выбор технологий для использования
Для проекта “Робот-Юрист” удобный интерфейс пользователя можно представить несколькими способами:
1. Веб-Приложение;
2. Мобильные приложения;
3. Telegram-бот.
Для доступа только к экспертной системе Веб-приложение будет слишком затратным и неудобным для использования в декстопном виде. Для того, чтобы получить экспертную информацию, достаточно будет именить лишь одну страницу.
Рассмотрим реализацию данной экспертной системы для мобильных приложений.
Для того, чтобы реализовать данное решение в мобильной разработке, нужно владеть несколькими платформами, так как в настоящее время для каждой платформы есть своя операционная система, под которую каждой по отдельности нужно писать мобильное приложение. Также для реализации нам нужно будет написать интерфейс с 0. Создание кнопок, переходов, состояний достаточно затратная обработка информации и так далее.
Также мобильная версия должна присутствовать на всех платформах, в том числе iOS, Android, windows Phone. У каждой операционной системы есть свой маркет, в котором нужно приобретать доступ за определенное количество денег, так называемыми сертификатами.
Рассмотрим реализацию данной экспертной системы в качестве Бота для мессенджера Telegram.
Боты в Telegram способны принять на себя роль экспертной системы лишь потому, что логика поведения совпадает.
Благодаря Telegram боту мы можем подключиться к нему с разных платформ, на которых подключен сам мессенджер, а на данный момент это самые популярные платформы что заменяет нам необходимость реализовывать на всех мобильных устройствах, а также в декстопном варианте, что заменяет нам необходимость использования экспертной системой в Веб-Приложении. Одним лишь Telegram-ботом мы получаем доступ к экспертной системе почти со всех платформ, которые наиболее популярны. Более того, для реализации экспертной системы нам не понадобятся особые затраты в разработке, когда мы используем готовые библиотеки и модули.
Благодаря команде разработчиков Telegram реализовала простой и отлично документированный API для возможности работы с ботами, привязка ко многим языкам программирования и популярным современным технологиям вышла достаточно быстро.
Способов реализации бота на различных языках программирования достаточно.
Изначально мы рассмотрели несколько вариантов реализации на разных языках программирования и определили наиболее подходящий для нас это язык Python.
3 Выбор соответствующих модулей и библиотек на языке Python
3.1 Библиотека time
В реализации нам понадобится библиотека time. Мне она пригодилась в бесконечном цикле, который держит бот в запущенном состоянии, обрабатывая возможные ошибки (Рис.3.1).
Рис.3.1.
3.2 Библиотека fysom
Для реализации Детерминированного Конечного Автомата нам понадобиться библиотека Fysom.
Fysom - это библиотека написанная на JavaScript, позднее переписанная на Python, которая представляет из себя реализацию ДКА, со всеми ограничениями способствующими поддержанию целостности ДКА. В этой переписанной библиотеке есть методы для создания состояний, а также есть возможность задавать условия переходов из одного состояния в другое. Для начала определим, что такое Конечные автоматы.
Конечный автомат - это способ представления поведения объекта в виде последовательности его состояний, описывающие реакцию объекта на внешние события, выполнение объектом действий, и изменение его отдельных свойств. В один и тот же момент времени возможна только активность одного состояния. Выходит, что для реализации каких-то действий машина должна иметь свое состояние. Для реализаций конечного автомата нужно начинать с определения состояний и переходов между ними.
Конечные автоматы можно описать в виде диаграмм состояний и таблиц переходов.
Диаграмма переходов выглядят следующим образом (Рис.3.2.):
Рис.3.2.
Теперь опишем библиотеку Fysom, использующуюся для реализации данных, в виде конечного автомата для создания экспертных систем.
Это библиотека для настраиваемых конечных автоматов.
Библиотека представляют собой отличную концептуальную модель для решения многих проблем, с которыми сталкиваются разработчики: от условного интерфейса, мониторинга соединений и управления до инициализации и т.д. Они могут упростить запутанные пути асинхронного кода, их легко протестировать, и они по своей сути помогают избежать неожиданных ловушек краевого случая. Библиотека стремится предоставить нам все необходимые инструменты для моделирования конечных автоматов.
Библиотека имеет в себе необходимые команды для моделирования конечных автоматов.
3.3 pyTelegramApi
Библиотека для взаимодействия с Telegram ботом pyTelegramApi. Взаимодействие ботов с людьми основано на HTTP-запросах. Библиотека pyTelegramBotAPI, берет на себя все нюансы отправки и получения запросов, позволяя сконцентрироваться непосредственно на логике.
4. Реализация экспертной системы для бота
4.1 Этапы разработки
1. Подключение всех библиотек;
2. Создание объекта ДКА (fysom);
3. Инициализация ДКА (с состояниями и переходами) Создание Fysom, задаем начальное состояние, задаем переходы, назначаем методы для обработки каждого состояния;
4. Создание объекта для связи с botApi, с передачей токена;
5. В каждый метод обработки состояния мы говорим боту отправить сообщение в соответствии с состоянием(все тексты сообщений и кнопки храним в отдельном файле в каждом отдельном массиве);
6. Создание обработчика нажатий пользователей на кнопки;
7. Описание поведения ДКА в соответствии с callback data полученным от обработчика из пункта 6 (говорим в какое состояние перейти).
4.1.1 Telegram Бот
Боты телеграмм - аккаунты, которые управляются специальными разными программами. Они используются для:
- Выполнения команд в чатах;
- Поиска в интернете;
- Развлечения;
- Бизнеса и т.д.
Он может выполнять за своего владельца какую-либо деятельность. Например, одни из полезных функций ботов является: массовая рассылка, перевод с одного языка на другой, и так далее. Список функций для ботов достаточно широк.
Чтобы подключить бот достаточно:
- Войти в telegram;
- Открыть поиск;
- Ввести имя бота. Это может быть, например, @telerobot - робот Антон - один из самых популярных в телеграмм.
После этого, можно задать команды, которые он будет выполнять.
Каждый выполняет свои команды. Чтобы узнать какие, достаточно всего лишь написать “Помощь” В ответ придёт список команд, которыми можно будет воспользоваться.
Возможности бота достаточно большие. Многие предприятия и фирмы используют возможность создать свой бот. Это позволяет расширить границы работы и увеличить численность клиентов и обслуживание.
В данной работе мы используем Telegram Бот в качестве интерфейса для экспертной системы. Данная система поможет ответить на базовые вопросы об алгоритме и перспективах защиты ваших интеллектуальных прав.
4.2 BotFather. Настройка бота
Для начала нужно зарегистрировать саму оболочку бота в самом мессенджере, получить присвоенный ей ID, который является также токеном. В Телеграмм помощь при такой регистрации оказывает виртуальный помощник @BotFather.
Как это сделать:
1. Ввод команды /start для запроса инструкции.
2. Отправка установки /newbot.
3. @BotFather предлагает придумать имя для создаваемого бота. Оно должно заканчиваться словом «bot».
4. Далее помощник присылает токен нового виртуального пользователя и url для добавления его в список контактов.
Полученную комбинацию желательно протестировать этой ссылкой: api.telegram.org/bot/getMe.
Готово, у нас присутствует токен, для дальнейшей работы.
4.3 Подключение библиотеки ДКА Fysom
У нас есть метод для создания нашего автомата, в котором есть объект fsm в который мы передаем параметры:
1. Параметр: список начального состояния, в котором состояние `waiting_start'.
2 Перечисление всех событий с переходами.
Как устроен один из переходов:
У нас адрес названия состояния откуда мы начинаем (finals) и в состояние, которое мы перейдем `show_sections'
Чтобы совершить переход, нам необходимо вызвать метод, название которого мы указываем здесь:
Далее, после того, как мы описали все состояния и что необходимо вызвать для их перехода мы описываем callbaks.
Каждому коллбэку мы даем название и название самого метода, который будет обрабатываться:
В колбэках мы описываем то, что будет происходить при попадании на такое состояние. Есть определенное соглашение, что название коллбэка должно быть в соответствии с названием состояния и иметь частичку “on” мы даем название которое будет отвечать за происходящее, которое будет отвечать за это состояние.
Далее то же самое попадая на состояние мы должны будем описать далее, что будет происходить на этом состоянии.
Например возьмем состояние если мы попадем на него, сработает коллбэк.
Далее, что происходит в данном коллбэке:
Описываем работу обработчика события `onwaiting_start'.
будет реагировать на нажатие кнопки /start в интерфейсе Telegram бота. После нажатия на кнопку start запускается метод
Который заставляет бота отправить сообщение. Далее будет адресован ответ который мы берем из хранилища response_storage.py, обращаемся к нему и обращаемся к переменной , которая обращается к хранилищу и берет данную строкупосле сохраняет наш chat_id.
далее вызывается метод для перехода из этого состояния Вся работа этого коллбэка заключалась в том, чтобы отправить нам строку из хранилища и перейти из этого состояния waiting_start. Далее из этого состояния мы переходим дальше
Дальше смотрим на коллбэк назначанный на `show_sections'.
Здесь мы берем клавиатуру из файла `utils', который находится в отдельном файле со всеми кнопками и попросили бота отправить нам сообщение, где в сообщении содержится новая строка.
И помимо строки будет содержаться клавиатура.
В следствие чего мы увидим на экране список с категориями и клавиатуру, чтобы можно было выбрать одну из них.
Следующий этап - выбор из списка категорий.
Для того, чтобы бот дальше действовал, нам нужно получить ответ от пользователя.
Допустим, пользователь нажал на кнопку 3 то у нас callback_data будет 3
Далее проверяем в каком состоянии мы находились:
После нажатия на 3 у нас callback_data 3 мы выбрали третью ветку
и запустили этот метод fsm.selected_third() это означает что мы из состояния show_sections перешли в одно из первых состояний третьей ветки
Дальше в third1 тоже назначен соответствующий callback
где тоже берется клавиатура и отправляется пользователю один из вопросов из нашего хранилища response_storage вызывается метод где в качестве первого параметра идет в качестве второго параметра мы передаем номер сообщения который у нас идет по счету. Раз мы в первом состоянии нашей 3 ветки, значит это будет под номером 1 и передаем тип сообщения answer или questions
Это означает, что мы из массива берем соответствующее сообщение.
И отправляет пользователю и будет ждать ответа на кнопку “Да” или “Нет” за которым кроется коллбэк 1 или 2
После нажатия на соответствующую кнопку, например 1 вызывается этот метод:
Так мы показали как работают коллбэки в библиотеке Fysom
4.4 ApiTelegramBot
Структура библиотеки для ДКА вся расписана, а вот основное содержание всех действий в каждом состоянии работают за счет работы bot api
Для начала мы подключаем и создаем объект нашего бота.
После берем токен, который мы получили от BotFather изначально в самом Telegram.
После мы апперируем всеми методами через библиотеку бота.
Это некая обертка pyTelegramApi, где все методы расписаны и достаточно при вызове передать параметр. После создания объекта мы обращаемся к этим методам передавая лишь необходимый параметр, что убирает необходимость на более низком уровне взаимодействовать c api
4.5 Технология добавления новых веток в КДА
Рассмотрим добавление 7-ой ветки.
1) Добавляем новую кнопку в Utils.py;
2) Добавляем в дереве переход;
3) Добавляем в обработчик всех кнопок;
после вызова метода автоматически срабатывает переход из состояния `show_sections' в состояние `seventh1'.
4) описываем то, что будет происходить в этом состоянии, для этого прописываем callback .
5) описываем его работу:
6) обращаемся к нему в response.storage:
7) добавляем в категориях:
8) далее для перехода после нажатия на кнопку No добавляем следующее состояние:
Далее, если после нажатие No переходим в результативное финальное состояние нам нужно его добавить в finals, чтобы принудительно привести его в начальное состояние после завершения.
Далее как мы указали изначально разрешаем всем, кто в finals перейти в начальное состояние show_sections:
также создаем для него коллбэк и описываем его, в котором выдаем результат
и возвращаемся в начальное состояние :
Таким образом мы описали метод добавления новых веток в нашу экспертную систему.
5. Интерфейс и тестирование Telegram бота “Робот-юрист”
1) Находим бот в поиске по адресу @itislawyer_bot
2) Отправляем начальную команду для бота /start
3) Получаем приветствие и выбор категорий (Рис.5.1).
Рис.5.1. Приветствие и выбор категорий
4) Выбираем интересующую категорию и нажимаем на соответствующую кнопку (Рис.5.2).
Рис.5.2.
5) Далее нажимаем “Да” и переходим по вопросам по интересующей информации после чего получаем результат, основанный на экспертной системе (Рис.5.3).
Рис.5.3.
После чего бот выдает результат и возвращает в исходное состояние (Рис.5.4).
Рис.5.4.
Тестируем в боте все кнопки и проверяем все выводы. “Робот-Юрист” готов!
экспертный fysom telegram бот
Заключение
Физическое или юридическое лицо, которое обращается за консультацией, теперь может в удобном и доступном для него виде бесплатно получить экспертную оценку по юридическим вопросам. В конечном итоге мы решили проблему ограниченности физических возможностей. При увеличении объема обращений за консультациями к боту теперь не снизится качество и нет необходимости сокращать количество обращений путем повышения стоимости консультаций, с помощью бота первоначальную помощь по консультациям можно получить благодаря экспертной оценке Telegram бота. Представшая проблема несоответствия возможностей консультанта потребностям консультируемого эффективно решилась автоматизацией. При этом важность чтобы автоматизированное решение было надежным сохранилась (на его решения можно опираться, оно подкреплено ссылками на юридические документы, юридические статьи), представляет собой простой и удобный интерфейс для консультируемого (доступность, быстрое решение вопросов), возможность расширения возможностей по консультации для юристов.
Для автоматизации решений этих решений я воспользовался экспертной системой на основе баз знаний заранее проверенных самими юристами. Считаю что работа успешно закончена, все цели достигнуты, а задачи решены.
Список использованных источников
1. “Правовая охрана программ и баз данных”
2. “Экспертная система”
3. “CLIPS”
4. “JavaScript”
5. “PHP”
6. “Пишем бота для Telegram на языке Python”
7. “Модуль time”
8. “Библиотека Fysom”
9. “Callbaks”
10. “Конечные автоматы. Пишем ДКА”
Приложение
Класс utils.py # -*- coding: utf-8 -*-
from telebot import types
def select_keyboard(k_type):
if k_type == "section-number":
keyboard = types.InlineKeyboardMarkup()
callback_button1 = types.InlineKeyboardButton(text="1", callback_data="1")
callback_button2 = types.InlineKeyboardButton(text="2", callback_data="2")
callback_button3 = types.InlineKeyboardButton(text="3", callback_data="3")
callback_button4 = types.InlineKeyboardButton(text="4", callback_data="4")
callback_button5 = types.InlineKeyboardButton(text="5", callback_data="5")
callback_button6 = types.InlineKeyboardButton(text="6", callback_data="6")
callback_button7 = types.InlineKeyboardButton(text="7", callback_data="7")
keyboard.add(callback_button1, callback_button2, callback_button3, callback_button4,
callback_button5, callback_button6, callback_button7)
return keyboard
if k_type == "yes-no":
keyboard = types.InlineKeyboardMarkup()
callback_button1 = types.InlineKeyboardButton(text="Да", callback_data="1")
callback_button2 = types.InlineKeyboardButton(text="Нет", callback_data= "2")
keyboard.add(callback_button1, callback_button2)
return keyboard
if k_type == "yes-no-maybe":
keyboard = types.InlineKeyboardMarkup()
callback_button1 = types.InlineKeyboardButton(text="Да", callback_data="1")
callback_button2 = types.InlineKeyboardButton(text="Нет", callback_data="2")
callback_button3 = types.InlineKeyboardButton(text="Может быть", callback_data="3")
keyboard.add(callback_button1, callback_button2, callback_button3)
return keyboard
if k_type == "back_to_start":
keyboard = types.InlineKeyboardMarkup()
callback_button1 = types.InlineKeyboardButton(text="Начать сначала", callback_data="to_start")
keyboard.add(callback_button1)
return keyboard
Класс response_storage.py
# -*- coding: utf-8 -*-
welcome_message = "Добро пожаловать в проект Робот-Юрист."
first_response = "\nДля начала выберите категорию: \n\n" \
"1. Споры о досрочном прекращении правовой охраны товарного знака в связи с его неиспользованием\n" \
"2. Спор о нарушении исключительного права истца на фирменное наименование фирменным наименованием " \
"ответчика \n"\
"3. Нарушение исключительного права на фонограмму \n"\
"4. Нарушение исключительного права на объект авторских прав \n"\
"5. Нарушение исключительного права на исполнение \n"\
"6. Разрешение споров по договору коммерческой концессии \n"\
section_one_questions = [
"Является ли истец заинтересованным лицом в досрочном прекращении охраны товарного знака в связи с его"
" неиспользованием?",
"Имелся ли факт не использования Товарного знака с момента регистрации в течение 3 лет непрерывно?",
"Использовался товарный знак правообладателем или лицензиатом путем размещения на товарах упаковках "
"и т.д., с целью продажи продукции либо оказанию услуг и работ?",
"Использовался ли товарный знак на документации связанной с введением товаров в гражданский оборот?",
"Использовался товарный знак в предложениях о продаже товаров, об выполнении работ и оказании услуг, а так же "
"в объявлениях, на вывесках и в рекламе?",
"Использовался товарный знак в сети Интернет, в том числе в доменном имени и при других способах адресации?"
]
section_one_answers = [
"В соответствии со статьей 1486 Гражданского кодекса Российской Федерации, возможность подачи заявления о "
"досрочном прекращении правовой охраны товарного знака вследствие его неиспользования ставится в зависимость "
"от того, является ли подающее это Заявление лицо заинтересованным. Разъяснения: Информационное письмо от "
"20.05.2009 № 3 Об определении заинтересованности лица, подавшего заявление о досрочном прекращении правовой "
"охраны товарного знака в связи с его неиспользованием.",
"Исходя из времени доказывания по делам о досрочном прекращении правовой охраны товарного знака, истцом должно "
"быть подтверждено наличие своей заинтересованности в досрочном прекращении правовой охраны товарного знака как "
"своего права на иск Лицом, заинтересованным в прекращении правовой охраны товарного знака, знака обслуживания "
"может быть признано лицо, чьи права и законные интересы затрагиваются фактомналичия правовой охраны "
"соответствующего товарного знака, знака обслуживания",
"Использование товарного знака в порядке предусмотренном Гражданским кодексом не дает оснований для досрочного "
"прекращения его правовой охраны по основаниям предусмотренным статьей 1486 ГК РФ",
"Неиспользование товарного знака не в одной из форм в течение 3-х лет с момента регистрации непрерывно, "
"в соответствии со ст.1486 ГК РФ влечет досрочно прекращение правовой охраны по заявлению заинтересованного лица"
]
section_two_questions = [
"Истец является юридическим лицом (далее - ЮЛ), созданным в организационно-правовой форме полного товарищества?",
"Истец является ЮЛ, созданным в организационно-правовой форме товарищества на вере?",
"Истец является ЮЛ, созданным в организационно-правовой форме общества с ограниченной ответственностью?",
"Истец является ЮЛ, созданным в организационно-правовой форме акционерного общества?",
"Истец является ЮЛ, созданным в организационно-правовой форме публичного акционерного общества?",
"Истец является ЮЛ, созданным в организационно-правовой форме крестьянского (фермерского) хозяйства?",
"Истец является ЮЛ, созданным в организационно-правовой форме производственного кооператива (артели)?",
"Истец является ЮЛ, созданным в организационно-правовой форме хозяйственного партнерства?",
"Истец является ЮЛ, созданным в организационно-правовой форме унитарного предприятия?",
"Истец является ЮЛ, созданным в организационно-правовой форме казенного предприятия?",
"Истец обладает исключительным правом на свое фирменное наименование (ст. 1473 ГК РФ). Ответчик является "
"юридическим лицом, созданным в организационно-правовой форме полного товарищества?",
"Ответчик является ЮЛ, созданным в организационно-правовой форме товарищества на вере?",
"Ответчик является ЮЛ, созданным в организационно-правовой форме общества с ограниченной ответственностью?",
"Ответчик является ЮЛ, созданным в организационно-правовой форме акционерного общества?",
"Ответчик является ЮЛ, созданным в организационно-правовой форме публичного акционерного общества?",
"Ответчик является ЮЛ, созданным в организационно-правовой форме акционерного общества?",
"Ответчик является ЮЛ, созданным в организационно-правовой форме производственного кооператива (артели)?",
"Ответчик является ЮЛ, созданным в организационно-правовой форме хозяйственного партнерства?",
"Ответчик является ЮЛ, созданным в организационно-правовой форме унитарного предприятия?",
"Ответчик является ЮЛ, созданным в организационно-правовой форме казенного предприятия?",
"Ответчик обладает исключительным правом на свое фирменное наименование (ст. 1473 ГК РФ). Фирменное наименование"
" истца и фирменное наименование ответчика тождественны (п. 3. ст. 1474 ГК РФ)?",
"Фирменное наименование истца и фирменное наименование ответчика сходны до степени смешения (п. 3. ст. 1474 ГК РФ)?",
"Истец и ответчик осуществляют аналогичные виды деятельности (п. 3. ст. 1474 ГК РФ)?",
"Фирменное наименование истца внесено в ЕГРЮЛ раньше чем фирменное наименование ответчика (п. 3 ст. 1474 ГК РФ)?",
]
section_two_answers = [
"Истец не является обладателем исключительного права на фирменное наименование. Его наименование не подлежит "
"правовой охране как фирменное наименование",
"Ответчик не является обладателем исключительного права на фирменное наименование. Его наименование не подлежит "
"правовой охране как фирменное наименование",
"Конфликт между фирменными наименованиями отсутствует. Отказ в иске.",
"Фирменное наименование ответчика не нарушает исключительное право истца на его фирменное наименование.",
"Фирменное наименование ответчика нарушает исключительное право истца на его фирменное наименование."
]
section_three_questions = [
'Объект, исключительное прав на который истец считает нарушенным, соответствует признакам фонограммы (п. 1 ст. 1304, ст. 1322 ГК РФ)?',
'Исключительное право на фонограмму действует на территории РФ (ст.ст. 1328, п. 3 ст. 1304 ГК РФ)?',
'Истец обладает исключительным правом на фонограмму (ст. 1324 ГК РФ)?',
'Ответчик использовал фонограмму (п. 2 ст. 1324 ГК РФ)?',
'Фонограмма перешла в общественное достояние (ст. 1327 ГК РФ)?',
'Действия ответчика не являются случаем свободного распространения оригинала или экземпляров опубликованной фонограммы (ст. 1325 ГК РФ)?',
'Действия ответчика не являются случаем свободного воспроизведения произведения в личных целях (ст. 1273 ГК РФ)?',
'Действия ответчика не являются случаем свободного использования произведения в информационных, научных, учебных или культурных целях (ст. 1274 ГК РФ)?',
'Действия ответчика не являются случаем свободного публичного исполнения правомерно обнародованного музыкального произведения (ст. 1277 ГК РФ)?',
'Действия ответчика не являются случаем свободного воспроизведения произведения для целей правоприменения (ст. 1278 ГК РФ)?',
'Действия ответчика не являются случаем свободной записи произведения организацией эфирного вещания в целях краткосрочного пользования (ст. 1279 ГК РФ)?',
'Ответчик не имел права использовать фонограмму по причине перехода ему исключительного права на фонограмму в порядке правопреемства (ст. 1308.1., п. 2 ст. 1327 ГК РФ)?',
'Ответчик не имел права использовать фонограмму на основе договора об отчуждении исключительного права на объект смежных прав (ст. 1307 ГК РФ)?',
'Ответчик не имел права использовать фонограмму на основе лицензионного договора о предоставлении права использования объекта смежных прав (ст. 1308 ГК РФ)?',
'Ответчик не имел права использовать фонограмму по причине наличия у него права использования на основе иных способов распоряжения исключительным правом (ст. 1233 ГК РФ)?',
'Ответчик не имел права использовать фонограмму по причине наличия у него права использования на основе перехода исключительного права к другим лицам без договора (ст. 1241 ГК РФ)?'
]
section_three_answers = [
'Объект не является фонограммой. Исключительное право на фонограмму не может быть нарушено.',
'На фонограмму не возникли интеллектуальные права, в том числе исключительное право.',
'Истец не обладает правом на иск (п. 2 ст. 1250 ГК РФ)',
'Действия ответчика являются нарушением исключительного права на фонограмму. Ответственность наступает в соответствии со ст.ст. 1250, 1252 и 1311 ГК РФ.',
'Ответчик не нарушил исключительное право на фонограмму'
]
section_four_questions = [
'Произведение, по поводу нарушения исключительного права на которое заявлен иск, носит творческий характер?',
'Произведение выражено в объективной форме?',
'Истец обладает исключительным правом на произведение?',
'Произведение использовано ответчиком в смысле п. 2 ст. 1270 ГК РФ?',
'Произведение перешло в общественное достояние (ст. 1282 ГК РФ)?',
'Действия ответчика не являются случаем распространения оригинала или экземпляров произведения (ст. 1272 ГК РФ)?',
'Действия ответчика не являются случаем свободного воспроизведения произведения в личных целях (ст. 1273 ГК РФ)?',
'Действия ответчика не являются случаем свободного использования произведения в информационных, научных, учебных или культурных целях (ст. 1274 ГК РФ)?',
'Действия ответчика не являются случаем свободного использования произведения библиотеками, архивами и образовательными организациями (ст. 1275 ГК РФ)?',
'Действия ответчика не являются случаем свободного использования произведения постоянно находящегося в месте, открытом для свободного посещения (ст. 1276 ГК РФ)?',
'Действия ответчика не являются случаем свободного публичного исполнения правомерно обнародованного музыкального произведения (ст. 1277 ГК РФ)?',
'Действия ответчика не являются случаем свободного воспроизведения произведения для целей правоприменения (ст. 1278 ГК РФ)?',
'Действия ответчика не являются случаем свободной записи произведения организацией эфирного вещания в целях краткосрочного пользования (ст. 1279 ГК РФ)?',
'Действия ответчика не являются случаем реализации прав пользователя программы для ЭВМ и базы данных (ст. 1280 ГК РФ)?',
'Ответчик не имел права использовать произведение по причине перехода ему исключительного права на произведение по наследству (ст. 1283 ГК РФ)?',
'Ответчик не имел права использовать произведение на основе договора об отчуждении исключительного права на произведение (ст. 1285 ГК РФ)?',
'Ответчик не имел права использовать произведение на основе лицензионного договора о предоставлении права использования произведения (ст. 1286 ГК РФ)?',
'Ответчик не имел права использовать произведение на основе открытой лицензии на использование произведения науки, литературы или искусства (ст. 1286.1 ГК РФ)?',
'Ответчик не имел права использовать произведение по причине наличия у него права использования на основе иных способов распоряжения исключительным правом (ст. 1233 ГК РФ)?',
'Ответчик не имел права использовать произведение по причине наличия у него права использования на основе перехода исключительного права к другим лицам без договора (ст. 1241 ГК РФ)?'
]
section_four_answers = [
'Произведение не является объектом авторских прав',
'У истца отсутствует право на иск согласно п. 2 ст. 1250 ГК РФ',
'Действия ответчика являются нарушением исключительного права на произведение. Он привлекается к ответственности в соответствии со ст.ст. 1250, 1252 и 1301 ГК РФ.',
'Действия ответчика не являются нарушением исключительного права на произведение'
]
section_five_questions = [
"Объект, исключительное прав на который истец считает нарушенным, соответствует признакам исполнения (п. 1 ст. 1304, ст. 1313 ГК РФ)?",
"Исполнение выражено в форме, допускающей его воспроизведение и распространение с помощью технических средств (п. 1 ст. 1304 ГК РФ)?",
"Исключительное право на исполнение действует на территории РФ (ст.ст. 1321, п. 3 ст. 1304 ГК РФ)?",
"Истец обладает исключительным правом на исполнение (ст. 1317 ГК РФ)?",
"Ответчик использовал исполнение (п. 2 ст. 1317 ГК РФ)?",
"Исполнение перешло в общественное достояние (ст. 1318 ГК РФ)?",
"Действия ответчика не являются случаем свободного воспроизведения произведения в личных целях (ст. 1273 ГК РФ)?",
"Действия ответчика не являются случаем свободного использования произведения в информационных, научных, учебных или культурных целях (ст. 1274 ГК РФ)?",
"Действия ответчика не являются случаем свободного публичного исполнения правомерно обнародованного музыкального произведения (ст. 1277 ГК РФ)?",
"Действия ответчика не являются случаем свободного воспроизведения произведения для целей правоприменения (ст. 1278 ГК РФ)?",
"Действия ответчика не являются случаем свободной записи произведения организацией эфирного вещания в целях краткосрочного пользования (ст. 1279 ГК РФ)?",
"Ответчик не имел права использовать исполнение по причине перехода ему исключительного права на исполнение по наследству (ст. 1308.1., п. 4 ст. 1318 ГК РФ)?",
"Ответчик не имел права использовать исполнение на основе договора об отчуждении исключительного права на объект смежных прав (ст. 1307 ГК РФ)?",
"Ответчик не имел права использовать исполнение на основе лицензионного договора о предоставлении права использования объекта смежных прав (ст. 1308 ГК РФ)?",
"Ответчик не имел права использовать исполнение по причине наличия у него права использования на основе иных способов распоряжения исключительным правом (ст. 1233 ГК РФ)?",
"Ответчик не имел права использовать исполнение по причине наличия у него права использования на основе перехода исключительного права к другим лицам без договора (ст. 1241 ГК РФ)?",
]
section_five_answers = [
'Объект не является исполнением. Исключительное право на исполнение не может быть нарушено.',
'На исполнение не возникли интеллектуальные права, в том числе исключительное право.',
'У истца отсутствует право на иск согласно п. 2 ст. 1250 ГК РФ',
'Действия ответчика являются нарушением исключительного права на исполнение. Ответственность наступает в соответствии со ст.ст. 1250, 1252 и 1311 ГК РФ.',
'Ответчик не нарушил исключительное право на исполнение'
]
section_six_questions = [
"Товарный знак зарегистрирован в Роспатенте?",
"Договор коммерческой концессии заключен в письменной форме?",
"Предоставление права использования исключительных прав(товарного знака) по договору коммерческой концессии зарегистрировано в Роспатенте?"
]
section_six_answers = [
"Использование товарного знака правомерно",
"Несоблюдение письменной формы договора влечёт его недействительность. Такой договор считается ничтожным(п.1 ст. 1028 ГК РФ). Использование исключительного права на товарный знак невозможно. второй стороны товарного знака, правообладатель может обратиться в суд с требованием о взыскании компенсации за нарушение исключительного права на товарный знак.",
"В соответствии с п.2 ст. 1028 ГК РФ, несоблюдение требования о государственной регистрации, предоставление права"
"на товарный знак невозможно. При неправомерном использовании второй стороны товарного знака, правообладатель "
"может обратиться в суд с требованием о взыскании компенсации за нарушение исключительного права на товарный знак."
]
def select_message(section, message_id, m_type):
if section == 1:
if m_type == 'question':
return section_one_questions[message_id - 1]
if m_type == 'answer':
return section_one_answers[message_id - 1]
if section == 2:
if m_type == 'question':
return section_two_questions[message_id - 1]
if m_type == 'answer':
return section_two_answers[message_id - 1]
if section == 3:
if m_type == 'question':
return section_three_questions[message_id - 1]
if m_type == 'answer':
return section_three_answers[message_id - 1]
if section == 4:
if m_type == 'question':
return section_four_questions[message_id - 1]
if m_type == 'answer':
return section_four_answers[message_id - 1]
if section == 5:
if m_type == 'question':
return section_five_questions[message_id - 1]
if m_type == 'answer':
return section_five_answers[message_id - 1]
if section == 6:
if m_type == 'question':
return section_six_questions[message_id - 1]
if m_type == 'answer':
return section_six_answers[message_id - 1]
Класс config.py
# -*- coding: utf-8 -*-
token = "392082983:AAGzN9IBtPca0AC7WCs5hyNweJPQsfYoa1Q"
Класс bot.py
# -*- coding: utf-8 -*-
import telebot
import time
from fysom import Fysom
import config
import response_storage
import utils
chat_id = ''
section_number = 0
# Массив финальных состояний
finals = ['first1_no', 'first2_yes', 'first2_no', 'first3_yes', 'first4_yes', 'first5_yes', 'first6_yes', 'first6_no',
'second10_no', 'partnership9_no', 'tradename1_no', 'tradename2_no', 'tradename3_no', 'tradename3_yes',
'third1_no', 'third2_no', 'third3_no', 'third17', 'third_4_16_no', 'fourth1_no', 'fourth3_no', 'fourth21',
'fourth_4_20_no', 'fifth1_no', 'fifth2_no', 'fifth4_no', 'fifth17', 'fifth_5_16_no', 'sixth2_yes',
'sixth2_no', 'sixth3_no']
# Массив состояний из которых можно сразу перейти в состояние partnership
src_to_partnership = ['second1', 'second2', 'second3', 'second4', 'second5', 'second6', 'second7', 'second8',
'second9', 'second10']
# Массив состояний из которых можно сразу перейти в состояние tradename
src_to_tradename = ['partnership', 'partnership1', 'partnership2', 'partnership3', 'partnership4', 'partnership5',
'partnership6', 'partnership7', 'partnership8', 'partnership9']
# Массив состояний c 4 по 16 из которых можно сразу перейти в финальное состояние
src_third_4_16_no = ['third4', 'third5', 'third6', 'third7', 'third8', 'third9', 'third10', 'third11', 'third12',
'third13', 'third14', 'third15', 'third16']
# Массив состояний с 4 по 20 из которых можно сразу перейти в финальное состояние
src_fourth_4_20_no = ['fourth4', 'fourth5', 'fourth6', 'fourth7', 'fourth8', 'fourth9', 'fourth10', 'fourth11',
'fourth12', 'fourth13', 'fourth14', 'fourth15', 'fourth16', 'fourth17', 'fourth18', 'fourth19',
'fourth20']
# Массив состояний с 5 по 16 из которых можно сразу перейти в финальное состояние
src_fifth_5_16_no = ['fifth5', 'fifth6', 'fifth7', 'fifth8', 'fifth9', 'fifth10', 'fifth11', 'fifth12',
'fifth13', 'fifth14', 'fifth15', 'fifth16']
def create_fsm():
# Создаем объект ДКА
fsm = Fysom({'initial': 'waiting_start', #начальное состояние
'events': [ #переходы
{'name': 'go_to_start', 'src': finals, 'dst': 'show_sections'},
{'name': 'gotstart', 'src': 'waiting_start', 'dst': 'show_sections'},
{'name': 'selected_first', 'src': 'show_sections', 'dst': 'first1'},
{'name': 'first1_to_no', 'src': 'first1', 'dst': 'first1_no'},
{'name': 'first1_to_first2', 'src': 'first1', 'dst': 'first2'},
{'name': 'first2_to_yes', 'src': 'first2', 'dst': 'first2_yes'},
{'name': 'first2_to_no', 'src': 'first2', 'dst': 'first2_no'},
{'name': 'first2_to_first3', 'src': 'first2', 'dst': 'first3'},
{'name': 'first3_to_yes', 'src': 'first3', 'dst': 'first3_yes'},
{'name': 'first3_to_first4', 'src': 'first3', 'dst': 'first4'},
{'name': 'first4_to_yes', 'src': 'first4', 'dst': 'first4_yes'},
{'name': 'first4_to_first5', 'src': 'first4', 'dst': 'first5'},
{'name': 'first5_to_yes', 'src': 'first5', 'dst': 'first5_yes'},
{'name': 'first5_to_first6', 'src': 'first5', 'dst': 'first6'},
{'name': 'first6_to_yes', 'src': 'first6', 'dst': 'first6_yes'},
{'name': 'first6_to_no', 'src': 'first6', 'dst': 'first6_no'},
{'name': 'selected_second', 'src': 'show_sections', 'dst': 'second1'},
{'name': 'second_to_partnership', 'src': src_to_partnership, 'dst': 'partnership'},
{'name': 'second1_to_second2', 'src': 'second1', 'dst': 'second2'},
{'name': 'second2_to_second3', 'src': 'second2', 'dst': 'second3'},
{'name': 'second3_to_second4', 'src': 'second3', 'dst': 'second4'},
{'name': 'second4_to_second5', 'src': 'second4', 'dst': 'second5'},
{'name': 'second5_to_second6', 'src': 'second5', 'dst': 'second6'},
{'name': 'second6_to_second7', 'src': 'second6', 'dst': 'second7'},
{'name': 'second7_to_second8', 'src': 'second7', 'dst': 'second8'},
{'name': 'second8_to_second9', 'src': 'second8', 'dst': 'second9'},
{'name': 'second9_to_second10', 'src': 'second9', 'dst': 'second10'},
{'name': 'second10_to_no', 'src': 'second10', 'dst': 'second10_no'},
{'name': 'partnership_to_tradename', 'src': src_to_tradename, 'dst': 'tradename'},
{'name': 'partnership_to_partnership1', 'src': 'partnership', 'dst': 'partnership1'},
{'name': 'partnership1_to_partnership2', 'src': 'partnership1', 'dst': 'partnership2'},
{'name': 'partnership2_to_partnership3', 'src': 'partnership2', 'dst': 'partnership3'},
{'name': 'partnership3_to_partnership4', 'src': 'partnership3', 'dst': 'partnership4'},
{'name': 'partnership4_to_partnership5', 'src': 'partnership4', 'dst': 'partnership5'},
{'name': 'partnership5_to_partnership6', 'src': 'partnership5', 'dst': 'partnership6'},
{'name': 'partnership6_to_partnership7', 'src': 'partnership6', 'dst': 'partnership7'},
{'name': 'partnership7_to_partnership8', 'src': 'partnership7', 'dst': 'partnership8'},
{'name': 'partnership8_to_partnership9', 'src': 'partnership8', 'dst': 'partnership9'},
{'name': 'partnership9_to_no', 'src': 'partnership9', 'dst': 'partnership9_no'},
{'name': 'tradename_to_tradename1', 'src': 'tradename', 'dst': 'tradename1'},
{'name': 'tradename_to_tradename2', 'src': 'tradename', 'dst': 'tradename2'},
{'name': 'tradename1_to_tradename1_no', 'src': 'tradename1', 'dst': 'tradename1_no'},
{'name': 'tradename1_to_tradename2', 'src': 'tradename1', 'dst': 'tradename2'},
{'name': 'tradename2_to_tradename2_no', 'src': 'tradename2', 'dst': 'tradename2_no'},
{'name': 'tradename2_to_tradename3', 'src': 'tradename2', 'dst': 'tradename3'},
{'name': 'tradename3_to_tradename3_no', 'src': 'tradename3', 'dst': 'tradename3_no'},
Подобные документы
Недоліки та переваги при використанні телеграм ботів. Оцінка очікуваного ефекту від впровадження системи автоматизації. Стек технологій який використовувався при розробці чат-бота. Реалізація системи обліку клієнтів та замовлень онлайн магазину.
дипломная работа [7,2 M], добавлен 27.05.2023Компьютерные сети, основанные на равноправии участников. Этапы работы пиринговых сетей. Настройка сервера PtokaX. Возможности бота HUBBABOT, лингвистический фильтр и система ограничений. Папки и файлы бота, его команды. Расшифровка системных настроек.
лабораторная работа [547,6 K], добавлен 08.12.2011Структура экспертных систем, их классификация и характеристики. Выбор среды разработки программирования. Этапы создания экспертных систем. Алгоритм формирования базы знаний с прямой цепочкой рассуждений. Особенности интерфейса модулей "Expert" и "Klient".
курсовая работа [1,1 M], добавлен 18.08.2009Изучение методов построения конечного автомата, распознающего заданный язык, и принципы его программной реализации. Проектирование комбинационной и принципиальной схем распознающего конечного автомата с использованием библиотеки интегральных микросхем.
дипломная работа [1,8 M], добавлен 18.08.2013Технология экспертных систем на основе искусственного интеллекта: разработка и внедрение компьютерных программ, способных имитировать, воспроизводить области деятельности человека, требующих мышления, определенного мастерства и накопленного опыта.
курсовая работа [264,8 K], добавлен 22.12.2008Этапы разработки экспертных систем. Требования к организации-разработчику. Правильный выбор подходящей проблемы, работа с экспертом. Разработка прототипной системы. Развитие прототипа до промышленной экспертной системы. Особенности оценки системы.
презентация [169,1 K], добавлен 14.08.2013Основные этапы при создании экспертных систем: идентификация, концептуализация, формализация, выполнение, отладка и тестирование, опытная эксплуатация и внедрение. Соответствия между этапами проекта RAD и стадиями технологии быстрого прототипирования.
лекция [38,8 K], добавлен 07.11.2013Проектирование системы управления базами данных. Особенности реализации в MS SQL. Разработка пользовательского интерфейса. Тестирование и отладка приложения. Руководство пользователя и системного администратора. Анализ и методы разработки приложений.
курсовая работа [867,9 K], добавлен 16.07.2013Особенности разработки модуля взаимодействия и приложений для мобильных устройств на базе Windows Mobile. Основные компоненты системы. Выбор протокола XMPP. Создание базы данных, тестирование и отладка системы. Программа, моделирующая аварийные ситуации.
курсовая работа [1,2 M], добавлен 05.11.2012Методика и основные этапы разработки web-библиотеки, требования к ней, содержание, структура и элементы. Идейное описание системы, направления ее проектирования. Порядок написания кода и тестирование систем, ее важнейшие функции и сферы использования.
курсовая работа [1,2 M], добавлен 08.02.2013