Бот цитаты великих людей вк
Обновлено: 06.11.2024
«Как у меня это получилось и получилось ли?» — прошу к прочтению…
В принципе, у бота довольно простой функционал, но он прост лишь поверхностно. Если углубиться, то все куда сложнее, ведь писать мы будем на PHP (оО)
Повторюсь, что мне не нужен просто генератор цитат, поэтому я решил задать боту кое-какую логику. Однако, мне также не нужна нейронная сеть, ведь обучение — пугающая задача.
Я решил проблему с креативом, когда попытался возродить великого философа XIX века — Фридриха Ницше.
Да, именно Ницше будет в роли бота, а потому даже случайные цитаты будут казаться умнее.
Но я хотел как-то объединить собеседника и бота, создать связь между ними…
Так, за основу была взята фраза собеседника, которая преобразовывалась фильтрами в ключевые слова, по которым из заранее подготовленной базы находились предложения.
Таким образом, формировался как-будто ответ на вопрос спрашивающего.
Во-первых, я избавлялся полностью от окончаний "а, и, ы, ами, ями, ах, ых. " и тд… Убирал знаки препинания и прочие символы.
Во-вторых, я не брал в расчет предлоги. Сначала я ограничил слова по их длине — до 3 букв. Но это было неправильно, ведь философии Ницше присущи такие слова, как: "бог, мир, рок, век и тд.". К тому же, после фильтрации слов из четырех букв, были слова из трех букв, ведь отбрасывались окончания. Тогда я просто ограничил поиск по таким словам, как: "над, что, про, как, где и тд.".
В-третьих, Ницше писал в своих книгах больше от себя, поэтому заменил входящие слова типа "твой, твое, тебя, любишь, можешь" на «мой, мое, меня, люблю, могу» соответственно.
Таким образом, получается своего рода диалог.
Далее — необходимо было сделать базу, некий словарь фраз/цитат/высказываний из отрывков книг Ницше.
Я загрузил с литрес книги Ницше в формате txt. Собрал их вместе, а затем профильтровал:
1 цитата = 1 предложение ( использовал разделитель в качестве ".", "!', "?" )
получилась база примерно такого вида:
Человек - это канат, натянутый между животным и сверхчеловеком, - канат над пропастью
Опасно прохождение, опасно быть в пути, опасен взор,обращенный назад, опасны страх и остановка
В человеке важно то, что он мост, а не цель: в человеке можно любить только то, что он переход и гибель
Не существует ни причин, ни действий
до фильтрации: "Ницше, что ты можешь сказать о женщинах?"
после фильтрации: "могу сказать женщин"
Осталось прикрутить систему поиска. С этим было сложно, ведь разные настройки давали разные результаты. И если один код выдавал правильный ответ, то на другой запрос выдавал не то, что нужно.
Было принято решение не использовать регулярные выражения, а вернее использовать их совместно со встроенными функциями типа:
substr
stripos
substr_count
и другие текстовые функции…
При помощи длинных условий сравнения и бесконечно долгих циклов, добился примерно нужного результата.
Если слово найдено, то прибавляется +1 в качестве «веса переменной».
Следовательно, чем больше слов найдено в предложении, тем больше «вес переменной».
Это говорит о том, что если слова «мораль и жизнь» были найдены в каком-то предложении из базы, то это 100% ответ, который будет выдан.
Но если слова были по теме и выдавало много 100% результатов, то методом rand() выдавалось случайное предложение.
К тому же, не всегда это были маленькие предложения, поэтому приходилось обрезать ответ, примерно такими регулярками:
Это тестовая версия, а потому неполная, поэтому маты, молодежный сленг, ошибки в словах и тд — бот не учитывает и база лишь на 10000 фраз.
В качестве примеров могу привести диалоги:
Вывод: Да, бот не имеет двустороннего общения с пользователем — он не искусственный интеллект. Но в беседе из большого количества участников бот станет хорошим «собеседником».
Базовые функции
Переходим к программной части:
Подключаем нужные плагины: pickle, random, requests и библиотеку vk_api, благодаря которой можно работать с «ВКонтакте».
Создаем словарь с цитатами и словари для хранения информации:
Сами цитаты заключены в списки в ключах словаря «series» для того, чтобы на одну серию приходилось много цитат.
Переменная «series_in_chats» нужна для хранения информации о серии в отдельной беседе, переменная «quotes_in_chats» аналогично, только для хранения информации о цитате.
Теперь подключаемся к группе:
Подробнее о методе тут.
Угадайка
Внедряем очки
Этот код нужно вставить после проверки «if chat_id not in series_in_chats»:
Следующая цитата
В новом проекте мне предстояло работать с потоками node.js, о которых я раньше только слышал. Как-то вечером, вникая в тему, я городил собственный "велосипед", задачей которого была обработка imagemagick'ом картинок и загрузка их через апи во "вконтакт", без сохранения на диске сервера.
Вскоре, я решил передохнуть, попить кофе и полистать Пикабу. На глаза мне попался пост, с цитатой великого философа. И тут у меня возникла идея бота, который бы позволит всем желающим создавать (псевдо)цитаты великих людей :) Наработки уже имелись, поэтому я и запилил его всего за пару часов.
Время лечит, но за деньги быстрее. /стетхем
Можно окрасить карточку в другой цвет. Например:
Современное общество забыло о наших главных ценностях, чистоте и целомудрии. С божьей помощью, мы выведем свои души на верный путь. /серова /синий
Древняя китайская мудрость гласит: Если нечего сказать, скажи китайскую мудрость. /конфуций /ночь
Следующая цитата
ВК не так давно официально разрешили ботов. И за небольшое время их появилась целая куча. 90% из них абсолютно бесполезны, но есть те, которые очень даже полезны,особенно учитывая то, что вк всегда под рукой, такие боты упрощают жизнь, но полезных найти трудно в этом изобилии. Поэтому решил рассказать про нескольких из них.
Вот мой небольшой список ботов ВК. Буду рад если в коментарии еще оставите полезных ботов.
PS не в коем случае не реклама. Просто эти боты чуточку упрощают мне жизнь, вот и решил поделится ими.
А, и да. Чуть не забыл. Практически все боты просят подписаться на них перед работой.
Следующая цитата
Для того, чтобы создать группу или же сообщество для нашего бота, нужно зайти в раздел «Сообщества» в ВКонтакте и нажать на кнопку «Создать сообщество» в правом верхнем углу.
Выбираем тип сообщества «Группа по интересам».
Придумываем название, выбираем тематику, тип группы оставляем открытой.
Теперь нам потребуется узнать ID и создать токен группы.
Если же ID можно узнать в адресной строке после слова «club», то с токеном нужно будет немного запариться.
Заходим в управление группой:
Выбираем раздел «Работа с API» и включаем там «Long Poll API» для работы бота.
Далее переходим в «Ключи доступа», создаём ключ доступа с такими настройками:
Получившийся ключ доступа и есть наш токен:
Осталось разве что разрешить добавлять группу в беседы.
Заключение
По итогу, бот будет работать как-то так:
Разумеется, на этой основе можно создать практически любого бота — не только угадайку.
Созданный бот можно увидеть в сообществе ВКонтакте "Обитель Квестов | Смешарики".
Установка модуля vk_api
Для того, чтобы установить модуль для работы с «Вконтакте API» нужно прописать в командную строку следующую команду:
Ещё нужно создать в директории бота файл «points.pickle».
Читайте также: