Начинаем накачивать ассистента Розалию навыками. Напомню, Розалия должна уметь:
- Выполнять поиск в Wikipedia
- Воспроизводить музыку
- Отправлять письма
- Открывать сайты
Фокусируемся только на этих задачах. Итак, погнали.
Модуль wikipedia
Для того, чтобы Розалия умела искать нужную мне информацию на ресурсах Wikipedia, я воспользуюсь модулем «wikipedia». В данном модуле уже реализован поиск на ресурсе. Кто читал предыдущую статью «Цель — это начало» знают, что для использования модуля необходимы два действия;
- Установить модуль
- Импортировать его в программу
Установка модуля осуществляется в командной строке: я введу команду
pip install wikipedia.
pip — это установщик пакетов, скачивает внешние модули из репозитория Python. В репозитории Python собрана огромная библиотека пакетов. Богатая библиотека внешних модулей - одно из достоинств языка программирования Python.
Директива install говорит установщику: - установи модуль wikipedia
В начале был проект
Чтобы импортировать модуль wikipedia в программу, сначала создам проект программы. Код на Python можно набрать хоть в текстовом редакторе. только сохранить файл нужно с расширением py. Как это делать написано в статье «Установка Python». Возможности встроенного текстового редактора типа блокнота меня не устраивают. Так, как мне придется работать с командной стройкой и текстовым редактором - переключение между ними не очень радует. И я подумал нельзя ли сочетать терминал командной строки и редактор кода? К счастью есть терминалы командной строки с встроенным редактором кода под Python. Этот терминал вы можете скачать c GITHUB по ссылке . В CMDER присутствует уже встроенный редактор — nano.
На самом деле в cmder встроено два редактора: nano и vi. Мне удобно пользоваться этими редакторами. Вы же можете скачать любой редактор, например - Atom.
Откройте cmder и наберите команду mkdir d:\rozalia — этой командой я создаю каталог на диске d c именем rozalia (используйте ваше имя диска). Именно здесь буду хранить файлы проекта ассистента. Затем в командной строке ввожу
nano d:\rozelia\search_wiki.py
Не трудно догадаться, что второй командой я открываю файл search_wiki.py через редактор nano. Так как файл search_wiki.py я не создавал, то nano просто создаст его за меня по указанному пути d:\rozalia. Перед вами открылся чистый лист редактора nano. В нем я буду писать историю Розалии - голосового ассистента на Python.
Поиск на ресурсе Wikipedia в трех строках кода
В трех строках кода Розалия приобретёт свой первый навык. Для этого открою файл search_wiki.py через редактор nano —
nano d:\rozelia\search_wiki.py
и запишу три строчки кода:
import wikipedia
wikipedia.set_lang("ru")
wikipedia.summary("Python",sentences=5)
Командой import wikipedia я говорю Python, что хочу использовать все возможности внешнего модуля wikipedia в своей программе. А чтобы обратиться к модулю из программы нужно записать имя модуля и через точку его метод. Например, wikipedia.summary("Python",sentences=5) — ищет строку, заключенную в кавычках («Python») на ресурсах Wikipedia, и возвращать в качестве результата 5 предложений из найденного содержания (sentences=5). По умолчанию модуль «wikipedia» обращается к англоязычной версии ресурса Wikipedia, но эта проблема легко решается добавлением строки кода
wikipedia.set_lang("ru").
Чтобы понять, что делает summary, я открою ресурс Wikipedia и проделаю все действия выполняемые программой.
- Открою ресурс Wikipedia
- Выберу язык — русский.
- В строке поиска «вбиваю» Python.
В результате я получил статью о «Python». Пять предложений из этой статьи и будет результатом выполнения команды
wikipedia.summary(„Python“, sentences=5).
С помощью аргумента sentences я могу задавать любое количество предложений из статей Wikipedia, достаточно изменить число 5 на любое другое. Теперь настало время отправить программу на исполнения. Запускаю программу командой:
python d:\rozalia\search_wiki.py.
И ничего не происходит. Я не указал, что дальше делать интерпретатору Python - то ли вывести эти пять предложений на экран, то ли сохранить - Python не знает. Исправлю это, изменю немного код:
import wikipedia
wikipedia.set_lang("ru")
print(wikipedia.summary("Python",sentences=5))
Командой print я явно говорю Python, что хочу вывести результат исполнения функции summary () на экран монитора. Теперь снова запущу файл на исполнение. То, что надо!
Продумывать пару шагов вперед - критерий успеха
Я описал навык Розалии, искать нужную мне информацию. Но сам навык без сущности, которая им владеет - просто воздух. К примеру, у человека есть навык поднимать руку, но нет самого человека. Или есть навык забить гвоздь, но нет гвоздя. К тому же, искать в Wikipedia только одно слово - это бесполезное занятие. А я сделал способной Розалию искать именно одно слово - «Python». Но мне нужно, чтобы она искала любое слово или термин. Например, если Розалия встречает в моем вопросе слово «wikipedia», то запускает навык поиска на этом ресурсе. Если скажу «включи музыку», то запускается навык «воспроизведения музыки» и т.д.
Об этом и о многом другом я расскажу в следующих статьях. И, да, главное на что мне предстоит ответить в следующий раз:
Чем отличается сущность от ее способностей и как их соединить вместе? Сущностью можно назвать Розалию, а способностями - ее навыки.
Продолжу творить. Если повезёт за семь дней закончу и родится новоиспечённая "Ева". Погружение в python-код только начинается. До встречи на другой глубине)