В этом видео я расскажу, как создать ВКонтакте бота на языке Python с помощью библиотеки (фреймворка) VKWave. Разработанный бот по запросу будет отправлять в личное сообщение свеженький мем с сайта Reddit. Кроме того, бот умеет отвечать на приветственные сообщения и достаточно вежлив, чтобы не молчать, когда его благодарят. Кроме VKWave для разработки мы также воспользуемся библиотекой asyncpraw для работы с Reddit API.
Материалы из видео:
✔ VKWave: https://github.com/fscdev/vkwave
✔ Asyncpraw: https://asyncpraw.readthedocs.io/en/latest/index.html
✔ Reddit: https://www.reddit.com/
✔ Документация ВКонтакте (ВКонтакте API): https://vk.com/dev/manuals
✔ Исходный код бота из видео: https://vk.com/topic-194576836_47569750
Привет! Я долго занимаюсь программированием, в частности программирование на языке Python. Я много чего узнал за это время, и мне есть, чем поделиться со зрителями моего канала.
Здесь выходят разнообразные ролики, касающиеся IT-тематики и программирования. Подписывайся, будем узнавать что-то новое и работать вместе! Погнали!
Создание чат бота VK на Python
#python #discord #бот #pylounge #ityoutubersru
Источник: best-coding.ru
Как создать простого командного бота в Python
Итак, как часто вы узнаете погоду или время у Siri, Алисы или Google? Сейчас на рынке существует несколько видов ботов. Некоторые из них более сложные, способные поддерживать непрерывный диалог, а другие просто выполняют различные предварительно запрограммированные действия.
В этой статье мы расскажем, как создать бота, который выполняет определенные действия. С его помощью вы сможете проверять наличие товаров, запрашивать время и погоду и даже извлекать данные с веб-страниц. Если вас заинтересовала такая технология, рекомендуем начать с этого простого бота.
Итак, создаем набор данных, но сначала определим некоторые понятия.
- Функции — это взаимодействие между ботом и человеком. Оно состоит из шаблонов, тегов и ответов.
- Шаблоны — это фразы или ключевые слова, которые может задавать человек для запуска и формирования процесса.
- Теги — это название процесса, который необходимо выполнить.
- Ответы — это может быть один или несколько ответов, которые должен выдавать получившийся бот.
Например, функция приветствия:
intents:
— tag: greeting
patterns:
— Hi (Привет)
— How are you (Как вы)
— Is anyone there? (Тут кто-нибудь есть?)
— Hey (Эй)
— Hola (Привет)
— Hello (Здравствуй)
responses:
— Hi (Привет)
— Holi (Привет)
— Hello, thanks for asking (Привет, спасибо за вопрос)
— Good to see you again (Рад снова вас видеть)
БОТ ДЛЯ ГРУППЫ VK НА PYTHON ЗА 15 МИНУТ
— Hi there, how can I help? (Привет, чем я могу помочь?)
— tag: goodbye
patterns:
— Bye (Пока)
— See you later (Увидимся)
— Goodbye (До свидания)
— Nice chatting to you, bye (Было приятно пообщаться, пока)
— Till next time (До встречи)
responses:
— See you! (Увидимся!)
— Have a nice day (Хорошего дня)
— Bye! Come back again soon. (Пока! Приходите еще)
Итак, нам потребуется:
- yml-файл со всеми функциями, которые должен выполнять готовый бот. Если вы не знаете, что такое yml-файл, то пройдите по этой ссылке.
- Python 3 либо версии выше.
- Библиотеки TensorFlow, pickle и nltk.
Разделим все на 3 главные части или класса: считыватель функций бота, модель бота и загрузчик бота. Вот какие данные необходимо будет импортировать:
import os
import re
import yaml
import nltk
import random
import json
import numpy as np
import tensorflow as tf
import pickle
from tensorflow.keras.models import load_model
from tensorflow.keras.layers import (
Dense,
Activation,
Dropout
)
from nltk.stem import WordNetLemmatizer
from tensorflow.keras.optimizers import SGD
Считыватель функций бота
Этот класс предназначен для чтения yml-файла с функциями. Для данной модели бота понадобится 4 выхода: лемматизатор, слова, классы и функции. Бот, которого мы создаем, — простой классификатор. В нем каждый тег является классом, а токенизированные и лемматизированные слова — вводимыми данными.
Наконец, необходимо узнать, какую из всех команд или действий должен выполнить бот. Итак, классы — это теги. Затем нужны токенизированные и приведенные к начальной форме слова. Для этого понадобится лемматизатор и токенизатор слов — они есть в библиотеке nltk. Сначала создаем имя класса BotIntentsReader .
Мы добавили дополнительный вывод под названием documents , который представляет собой только объединение токенизированных слов (до лемматизации) и тегов. Эта переменная будет повторяться для обучения модели.
Модель бота
Вводимыми данными для модели бота будет список токенизированных слов для шаблона. Мы лемматизируем каждое слово, чтобы привести его к начальной форме и составить список связанных с ним слов. Затем создадим массив из слов с обозначением 1, если в текущем шаблоне найдено либо не найдено совпадение между словами. Для вывода создадим двоичную матрицу для репрезентации каждого тега. Все это сделаем с помощью алгоритма order_data (внутри класса BotModelCreator ), который будет выполняться в рамках инициализации (при создании класса).
Вторая и самая интересная часть — это построение модели. На входе модели бота будет список слов. В случае приветствия функция будет равна 23 (всего разных слов). Затем — вывод возможных тегов (в данном случае 2), которые были заданы.
Для этой модели мы будем использовать простую нейронную сеть, но вы можете попробовать более продвинутую или сеть с другой архитектурой по вашему выбору. Архитектура представляет собой два плотных слоя 32 и 16 с функцией активации RELU и выдачей 0,5.
Теперь, когда у нас есть все — от последовательности ввода до алгоритмов обучения, остается только натренировать бота. Сначала нужно загрузить все модели и создать данные для бота, а затем и саму модель. Можно оставить сообщение по умолчанию равным 0 (если вы хотите регистрировать в логе информацию об обучении, измените его на 1 или 2).
Теперь нам нужно сохранить все файлы модели, которые необходимы для использования бота.
bot_data = BotIntentsReader(«intents.yml»)
bot_model = BotModelCreator(
bot_data=bot_data,
)
bot_model.train_model()
bot_model.save_models()
Наконец у нас есть файлы, модель обучена, но что теперь? Как взаимодействовать с получившимся ботом? Для этого нужно создать новый класс, который может загружаться из файла или передавать объект bot_model для прогнозирования тега. Также нужен метод, который использует для ввода текст и возвращает ответ от бота. Можно добавить и защиту от незнакомых команд: если пользователь отправит предложение, в котором нет нужного слова из созданного выше списка слов, бот ответит: «Я вас не понимаю, пожалуйста, повторите».
class BotLoader():
def __init__(self, bot_model, threshold=0.25):
self.threshold = threshold
if type(bot_model)==dict:
self.lemmatizer = pickle.load(open(bot_model[«lemmatizer»], ‘rb’))
self.model = load_model(bot_model[‘model’])
self.intents = json.loads(open(bot_model[‘intents’]).read())
self.words = pickle.load(open(bot_model[‘words’],’rb’))
self.classes = pickle.load(open(bot_model[‘classes’],’rb’))
else:
self.model = bot_model.model
self.intents = bot_model.intents
self.words = bot_model.words
self.classes = bot_model.classes
self.lemmatizer = bot_model.lemmatizer
def clean_up_sentence(self, sentence):
sentence_words = nltk.word_tokenize(sentence)
sentence_words = [self.lemmatizer(word.lower()) for word in sentence_words]
return sentence_words
def bow(self, sentence):
sentence_words = self.clean_up_sentence(sentence)
bag = [0]*len(self.words)
for s in sentence_words:
for i, w in enumerate(self.words):
if w == s:
bag[i] = 1
return (np.array(bag))
def predict_class(self, sentence):
tokens = self.bow(sentence)
if tokens.sum() > 0:
predictions = self.model.predict(np.array([tokens]))[0]
results = [[i, r] for i, r in enumerate(predictions) if r > self.threshold]
results.sort(key=lambda x: x[1], reverse=True)
return_list = []
for result in results:
return_list.append(
«probability»: str(result[1])>
)
else:
return_list = None
return return_list
def getResponse(self, ints):
tag = ints[0][‘intent’]
for i in self.intents:
if(i[‘tag’]== tag):
result = random.choice(i[‘responses’])
break
return result
def chatbot_response(self, msg):
ints = self.predict_class(msg)
if ints is not None:
res = self.getResponse(ints)
else:
res = «I don’t understand you, can you repeat»
return res
Для тестирования нужно только создать объект загрузчика бота и сообщить ему некоторый текст. Теперь единственное, что остается сделать, — это добавить больше функций с тегами, шаблонами и ответами, чтобы сделать бота «умнее».
- 22 сниппета на Python для повседневных задач
- Как скрывают секретные ключи и пароли в Python
- Создаем собственную Alexa в 20 строках Python
Источник: medium.com
Как создать простого командного бота в Python
Итак, как часто вы узнаете погоду или время у Siri, Алисы или Google? Сейчас на рынке существует несколько видов ботов. Некоторые из них более сложные, способные поддерживать непрерывный диалог, а другие просто выполняют различные предварительно запрограммированные действия.
В этой статье мы расскажем, как создать бота, который выполняет определенные действия. С его помощью вы сможете проверять наличие товаров, запрашивать время и погоду и даже извлекать данные с веб-страниц. Если вас заинтересовала такая технология, рекомендуем начать с этого простого бота.
Итак, создаем набор данных, но сначала определим некоторые понятия.
- Функции — это взаимодействие между ботом и человеком. Оно состоит из шаблонов, тегов и ответов.
- Шаблоны — это фразы или ключевые слова, которые может задавать человек для запуска и формирования процесса.
- Теги — это название процесса, который необходимо выполнить.
- Ответы — это может быть один или несколько ответов, которые должен выдавать получившийся бот.
Например, функция приветствия:
intents: — tag: greeting patterns: — Hi (Привет) — How are you (Как вы) — Is anyone there? (Тут кто-нибудь есть?) — Hey (Эй) — Hola (Привет) — Hello (Здравствуй) responses: — Hi (Привет) — Holi (Привет) — Hello, thanks for asking (Привет, спасибо за вопрос) — Good to see you again (Рад снова вас видеть) — Hi there, how can I help? (Привет, чем я могу помочь?) — tag: goodbye patterns: — Bye (Пока) — See you later (Увидимся) — Goodbye (До свидания) — Nice chatting to you, bye (Было приятно пообщаться, пока) — Till next time (До встречи) responses: — See you! (Увидимся!) — Have a nice day (Хорошего дня) — Bye! Come back again soon. (Пока! Приходите еще)
Итак, нам потребуется:
- yml-файл со всеми функциями, которые должен выполнять готовый бот. Если вы не знаете, что такое yml-файл, то пройдите по этой ссылке.
- Python 3 либо версии выше.
- Библиотеки TensorFlow, pickle и nltk.
Разделим все на 3 главные части или класса: считыватель функций бота, модель бота и загрузчик бота. Вот какие данные необходимо будет импортировать:
import os import re import yaml import nltk import random import json import numpy as np import tensorflow as tf import pickle from tensorflow.keras.models import load_model from tensorflow.keras.layers import ( Dense, Activation, Dropout ) from nltk.stem import WordNetLemmatizer from tensorflow.keras.optimizers import SGD
Считыватель функций бота
Этот класс предназначен для чтения yml-файла с функциями. Для данной модели бота понадобится 4 выхода: лемматизатор, слова, классы и функции.
Бот, которого мы создаем, — простой классификатор. В нем каждый тег является классом, а токенизированные и лемматизированные слова — вводимыми данными.
Наконец, необходимо узнать, какую из всех команд или действий должен выполнить бот. Итак, классы — это теги. Затем нужны токенизированные и приведенные к начальной форме слова. Для этого понадобится лемматизатор и токенизатор слов — они есть в библиотеке nltk. Сначала создаем имя класса BotIntentsReader .
Мы добавили дополнительный вывод под названием documents , который представляет собой только объединение токенизированных слов (до лемматизации) и тегов. Эта переменная будет повторяться для обучения модели.
Модель бота
Вводимыми данными для модели бота будет список токенизированных слов для шаблона. Мы лемматизируем каждое слово, чтобы привести его к начальной форме и составить список связанных с ним слов. Затем создадим массив из слов с обозначением 1, если в текущем шаблоне найдено либо не найдено совпадение между словами. Для вывода создадим двоичную матрицу для репрезентации каждого тега. Все это сделаем с помощью алгоритма order_data (внутри класса BotModelCreator ), который будет выполняться в рамках инициализации (при создании класса).
Вторая и самая интересная часть — это построение модели. На входе модели бота будет список слов. В случае приветствия функция будет равна 23 (всего разных слов). Затем — вывод возможных тегов (в данном случае 2), которые были заданы.
Для этой модели мы будем использовать простую нейронную сеть, но вы можете попробовать более продвинутую или сеть с другой архитектурой по вашему выбору. Архитектура представляет собой два плотных слоя 32 и 16 с функцией активации RELU и выдачей 0,5.
Теперь, когда у нас есть все — от последовательности ввода до алгоритмов обучения, остается только натренировать бота. Сначала нужно загрузить все модели и создать данные для бота, а затем и саму модель. Можно оставить сообщение по умолчанию равным 0 (если вы хотите регистрировать в логе информацию об обучении, измените его на 1 или 2).
Теперь нам нужно сохранить все файлы модели, которые необходимы для использования бота.
bot_data = BotIntentsReader(«intents.yml») bot_model = BotModelCreator( bot_data=bot_data, ) bot_model.train_model() bot_model.save_models()
Наконец у нас есть файлы, модель обучена, но что теперь? Как взаимодействовать с получившимся ботом? Для этого нужно создать новый класс, который может загружаться из файла или передавать объект bot_model для прогнозирования тега.
Также нужен метод, который использует для ввода текст и возвращает ответ от бота. Можно добавить и защиту от незнакомых команд: если пользователь отправит предложение, в котором нет нужного слова из созданного выше списка слов, бот ответит: «Я вас не понимаю, пожалуйста, повторите».
class BotLoader(): def __init__(self, bot_model, threshold=0.25): self.threshold = threshold if type(bot_model)==dict: self.lemmatizer = pickle.load(open(bot_model[«lemmatizer»], ‘rb’)) self.model = load_model(bot_model[‘model’]) self.intents = json.loads(open(bot_model[‘intents’]).read()) self.words = pickle.load(open(bot_model[‘words’],’rb’)) self.classes = pickle.load(open(bot_model[‘classes’],’rb’)) else: self.model = bot_model.model self.intents = bot_model.intents self.words = bot_model.words self.classes = bot_model.classes self.lemmatizer = bot_model.lemmatizer def clean_up_sentence(self, sentence): sentence_words = nltk.word_tokenize(sentence) sentence_words = [self.lemmatizer(word.lower()) for word in sentence_words] return sentence_words def bow(self, sentence): sentence_words = self.clean_up_sentence(sentence) bag = [0]*len(self.words) for s in sentence_words: for i, w in enumerate(self.words): if w == s: bag[i] = 1 return (np.array(bag)) def predict_class(self, sentence): tokens = self.bow(sentence) if tokens.sum() > 0: predictions = self.model.predict(np.array([tokens]))[0] results = [[i, r] for i, r in enumerate(predictions) if r > self.threshold] results.sort(key=lambda x: x[1], reverse=True) return_list = [] for result in results: return_list.append( ) else: return_list = None return return_list def getResponse(self, ints): tag = ints[0][‘intent’] for i in self.intents: if(i[‘tag’]== tag): result = random.choice(i[‘responses’]) break return result def chatbot_response(self, msg): ints = self.predict_class(msg) if ints is not None: res = self.getResponse(ints) else: res = «I don’t understand you, can you repeat» return res
Для тестирования нужно только создать объект загрузчика бота и сообщить ему некоторый текст. Теперь единственное, что остается сделать, — это добавить больше функций с тегами, шаблонами и ответами, чтобы сделать бота «умнее».
- 22 сниппета на Python для повседневных задач
- Как скрывают секретные ключи и пароли в Python
- Создаем собственную Alexa в 20 строках Python
Источник: nuancesprog.ru