Instantly share code, notes, and snippets.

Embed
What would you like to do?

Генератор текстов

Напишите утилиту, которая на основе заданных текстов генерирует свои.

Это задание даже важнее математики, но, вообще говоря, дописывать его до конца не обязательно.

Можете решать любыми методами. Приведенная ниже архитектура — это совет, а не строгое техзадание. Из ограничений только запрет на использование читерских внешних библиотек типа nltk – используйте только то, что есть по умолчанию в питоне.

Создайте репозиторий на гитхабе, залейте туда код и вставьте ссылку в форму. Обновляйте почаще — автор может, не дожидаясь конца отбора, связаться с вами и помочь советом.

Как автор предлагает

Автор когда-то сам такое писал и предлагает следующий простой и эффективный метод: биграммнная языковая модель.

По большому тексту для каждого слова составляется список слов, которые могут идти после него. В ML это называется обучением. Хранить эту информацию можно в виде словаря: {слово : [одно-следующее-слово, другое-следующее-слово, ...]}.

При самой генерации следует выбрать какое-нибудь начальное слово. В ML оно называется состоянием. Все следующие слова последовательно случайно выбираются из списка слов, идущих после текущего в словаре. Выбор из этого словаря можно делать через random.choice. В ML это называется сэмплированием.

Основной код должен быть разбит на две части: обучение и генерация.

Обучение:

  • Считать входные данные из файлов.
  • Очистить тексты: выкидывать неалфавитные символы, приводить к lowercase.
  • Разбить тексты на слова (в ML это называется токенизацией).
  • Сохранить модель в каком-нибудь формате, который позволяет восстановить слова и частоты биграмм.

Генерация:

  • Загрузить модель.
  • Инициализировать её каким-нибудь сидом.
  • Сгенерировать последовательность нужной длины.

Детали:

  • Удобно создать для обучения и генерации отдельные файлы и реализовать консольный интерфейс к ним через argparse.
  • Для работы с текстами может пригодиться библиотека регулярных выражений re.
  • Соблюдайте, пожалуйста, pep8. Пишите хороший код.
  • Следуйте принципам ООП. Оберните модель в класс, у которого будет методы fit и generate.
  • Для сохранения модели удобно использовать pickle или dill.
  • Обучать модель можно на чем угодно – от «Войны и мира» и «Гарри Поттера» до текстов Монеточки и протоколов съездов КПСС.

Задание большое и творческое. Нам интересно оценить ваши знания питона и общее умение программировать. Не дописали до конца — не страшно, отправляйте, что есть.

FAQ по всему отбору

Правда ли, что от нас хотят генерацию последовательности слов, а не предложений?

Если придумаешь, как прикрутить пунктуацию и разбиение на предложения — большой плюс.

Как работать с гитхабом?

Регаешься на сайте, устанавливаешь в системе git. Кликаешь на плюсик, выбираешь «new repository» и заполняешь название. Когда создастся, там где-то будет инструкция, как его синхронизировать со своей системой ( в нужной папке ввести git clone и ссылка на репозиторий).

Дальше заливать на него обновления так:

  • git add * — добавить все изменения в текущий коммит
  • git commit -a -m '...' — закоммитить их локально, с комментарием вместо точек (очень рекомендуется писать там что-нибудь информативное)
  • git push — залить на сам гитхаб

Прокатит ли в 5 и 6 сумма бесконечного ряда?

Это лучше, чем ничего, но, если вы её правильно получили, то она сворачивается в красивые формулы.

@strangesound

This comment has been minimized.

strangesound commented Sep 7, 2018

Как и куда вставлять ссылку?
И что за ссылка? На мой репозиторий?

https://github.com/strangesound/Danya_text_generator

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment