Тема: Морфология
Дедлайн: среда 30.09.20 23:59
Важное: работы принимаются строго в ipynb (не скрипт, не скрипт в ячейке ipynb)
Данные
Каждый выберет себе свою книгу, которая есть в (условно) открытом доступе на http://lib.ru/ - это и следующее задания будут на материале выбранного текста. Давайте брать не рассказы, а большое произведение (книга) - так будет интереснее.
Задание
Обработать текст книги с помощью морфологического анализатора, сделать поверхностный анализ.
Пункты:
-
Выбрать и сохранить книгу в .txt. Проследите, что кодировка UTF-8
-
Обработать книгу с помощью mystem:
- лемматизировать с помощью mystem
- замерить время работы на примере небольшого кусочка текста (например, глава) (как замерить время см. ниже)
- сохранить результат в файл
-
Обработать книгу через pymorphy
- токенизировать текст с помощью nltk (см. конспект)
- разобрать слова с помощью pymorphy
- замерить время работы (как с майстемом)
- сохраните результат в jsonlines: каждая строчка - это разбор слова в виде словаря
{"lemma": "конь", "word": "коня", "pos": "NOUN"}
-
Ответить на вопросы:
- Какую долю слов составляет каждая часть речи? (Например, для глагола - это количество глаголов, деленное на общее число слов в тексте)
- Найдите топ-20 (по частотности) глаголов и наречий
- (стоп слова можно убирать, можно и не убирать)
5*. Посмотрите документацию для nltk н-грамм (nltk.bigrams, например), попробуйте составить топ-25 биграмм и триграмм для вашего текста в лемматизированном виде (только леммы, без знаков препинания). Почему получаются именно такие?
Что должно быть при сдаче?
- Тетрадка с кодом и ответами на вопросы
- Текст книги
- файл c результатом работы майстема
- JSON с результатом работы пайморфи
Подсказка №1. Используйте %%timeit или %%time для замеров времени (в этот раз именно time). Для этого в начале ячейки, где находится то, что вы хотите замерить, напишите %%time. Например:
%%time
analysis = m.analyze('Вот так можно замерить время')Подсказка №2. Сохранить в JSON - это подготовить объект питоновский (список словарей или что-то подобное), положить в переменную, а ее отправить в json.dump вместе с файлом, куда вы это сохраните (именно dump, а не dumps). Подробнее см. конспект по JSON.
Подсказка №3. Если у вас не импортируется nltk, попробуйте установить заново, рестартнуть тетрадку, если не работает, то спросите в чате.
Подсказка №4.1 не работает майстем. Если у вас создается объект Mystem(), но ячейка "зависает", то:
- запустите разбор на одном предложении в тетрадке
- запустите майстем через консоль
Если все ок, то попробуйте еще раз и подождите (может быть, минут 15, если после этого нет результата, то лучше написать нам)
Подсказка №4.2: совсем не работает майстем. Если у вас не работает майстем (невозможно сделать m = Mystem()).
Попробуйте сделать так:
import platform
print(platform.architecture())
import sys
print(sys.platform)Если это покажет что-то похожее на windows и 32, то у вас 32-битная версия системы и последняя (дефолтная версия) у вас не будет работать. Попробуйте скачать с сайта версию 3.0, где написано 32 и запустить код еще раз. Если и это не работает, то так (путь - это где лежит exe-файл майстема):
import os
os.environ["MYSTEM_BIN"] = "D:\\mystem.exe"
m = Mystem()или так
m = Mystem(mystem_bin="D:\\mystem.exe")Если у вас есть вопросы, задавайте в чате или пишите преподавателям
Является обязательным оформление домашней работы в jupyter notebook с комментариями и по PEP-8
| Балл | Критерий |
|---|---|
| 3 | пункт 2 (с комментарием) |
| 4 | пункт 3 (с комментарием) |
| 2 | пункт 4 (с комментарием) |
| 1 | пункт 5 (с комментарием) |
Ссылки на GiHub Classroom:
| Группы 1 | ссылка |
| Группы 2 | ссылка |
| Группа 3 | ссылка |
| Группа 4 | ссылка |