Напишите утилиту, которая на основе заданных текстов генерирует свои.
Это задание даже важнее математики, но, вообще говоря, дописывать его до конца не обязательно.
Можете решать любыми методами. Приведенная ниже архитектура — это совет, а не строгое техзадание. Из ограничений только запрет на использование читерских внешних библиотек типа nltk – используйте только то, что есть по умолчанию в питоне.
Создайте репозиторий на гитхабе, залейте туда код и вставьте ссылку в форму. Обновляйте почаще — автор может, не дожидаясь конца отбора, связаться с вами и помочь советом.
Автор когда-то сам такое писал и предлагает следующий простой и эффективный метод: биграммнная языковая модель.
По большому тексту для каждого слова составляется список слов, которые могут идти после него. В ML это называется обучением. Хранить эту информацию можно в виде словаря: {слово : [одно-следующее-слово, другое-следующее-слово, ...]}.
При самой генерации следует выбрать какое-нибудь начальное слово. В ML оно называется состоянием. Все следующие слова последовательно случайно выбираются из списка слов, идущих после текущего в словаре. Выбор из этого словаря можно делать через random.choice
. В ML это называется сэмплированием.
Основной код должен быть разбит на две части: обучение и генерация.
- Считать входные данные из файлов.
- Очистить тексты: выкидывать неалфавитные символы, приводить к lowercase.
- Разбить тексты на слова (в ML это называется токенизацией).
- Сохранить модель в каком-нибудь формате, который позволяет восстановить слова и частоты биграмм.
- Загрузить модель.
- Инициализировать её каким-нибудь сидом.
- Сгенерировать последовательность нужной длины.
- Удобно создать для обучения и генерации отдельные файлы и реализовать консольный интерфейс к ним через
argparse
. - Для работы с текстами может пригодиться библиотека регулярных выражений
re
. - Соблюдайте, пожалуйста,
pep8
. Пишите хороший код. - Следуйте принципам ООП. Оберните модель в класс, у которого будет методы fit и generate.
- Для сохранения модели удобно использовать
pickle
илиdill
. - Обучать модель можно на чем угодно – от «Войны и мира» и «Гарри Поттера» до текстов Монеточки и протоколов съездов КПСС.
Задание большое и творческое. Нам интересно оценить ваши знания питона и общее умение программировать. Не дописали до конца — не страшно, отправляйте, что есть.
Правда ли, что от нас хотят генерацию последовательности слов, а не предложений?
Если придумаешь, как прикрутить пунктуацию и разбиение на предложения — большой плюс.
Как работать с гитхабом?
Регаешься на сайте, устанавливаешь в системе git
. Кликаешь на плюсик, выбираешь «new repository» и заполняешь название. Когда создастся, там где-то будет инструкция, как его синхронизировать со своей системой ( в нужной папке ввести git clone
и ссылка на репозиторий).
Дальше заливать на него обновления так:
git add *
— добавить все изменения в текущий коммитgit commit -a -m '...'
— закоммитить их локально, с комментарием вместо точек (очень рекомендуется писать там что-нибудь информативное)git push
— залить на сам гитхаб
Прокатит ли в 5 и 6 сумма бесконечного ряда?
Это лучше, чем ничего, но, если вы её правильно получили, то она сворачивается в красивые формулы.
Ссылку на репозиторий прикрепляйте в форме на странице отбора.