Задание
Предупреждение
Программа, которая не работает (не запускается или всегда валится с ошибкой), всегда заслуживает ровно 0 баллов. (Вне зависимости от того, насколько она похожа на правильную).
Если у вас что-то не получается, лучше всего задавать вопрос вида: "я считаю, что здесь у него то-то так-то, но программа ведёт себя так-то, значит у него здесь что-то ещё?" (Самое сложное в ответе на вопросы – понять, какая модель поведения/устройства питона сложилась у вас в голове).
Прежде, чем решать задачи, посмотрите на все условия. Рекомендуемая последовательность решения:
либо 1 -> 2 -> 3 -> 4 -> остальные,
либо 1 -> 2 -> 5 -> 6 -> 7 -> 8 -> остальные.
(0.2 балла) Создайте модуль utils, в который положите функции tokenize, token_types (и token_type, который для неё нужен). Напишите программу, которая пользуется модулем utils, читает и токенизирует файл words.txt, и выводит на экран построчно: токен и его тип.
(0.2 балла) Напишите скрипт, который открывает файл words.txt, токенизирует, считает частоты слов, и выводит ответ в виде CSV-таблицы с двумя колонками: токен, частота. Частота токена – количество вхождений токена, делённое на общее число токенов в тексте. Порядок строк в таблице – произвольный. Для каждого токена в таблице должна быть ровно одна строка (повторения запрещены).
(0.3 балла) Напишите функцию parse_exceptions, которая получает на вход CSV-файл с ровно двумя колонками (не нужно проверять, что это так), в первой колонке токен, во второй – тип токена, и возвращает словарь, который по токену возвращает его тип.
(0.7 балла) Поправьте ваш токенизатор так, чтобы он учитывал типы токенов в таблице исключений (прочитанной в задании 3). Для проверки токенизатора программа должна возвращать CSV-файл с колонками: позиция токена, токен, тип. Позиция токена – номер символа во входном файле. Перед решением задачи конкретизируйте, что именно лежит в таблице исключений (то есть напишите это об этом текст и отправьте его мне!)
(0.3 балла) Напишите функцию parse_dictionary, которая получает на вход CSV-файл с неограниченным числом колонок в каждой строке, и для каждой непустой строки возвращает словарь, в котором ключ – слово из первой колонки, значение – список слов из остальных колонок.
(0.3 балла) Напишите функцию definition_pairs, которая принимает на вход словарь (ключ – определяемое слово, значение – список слов-определений) и возвращает список пар определяемое слово – определение (для каждой записи в словаре возвращает столько пар определяемое – определение, сколько определений в этой записи). Т.е. definition_pairs({'a':['b', 'c', 'd']}) == [('a', 'b'), ('a', 'c'), ('a', 'd')] или definition_pairs({'a':['b', 'c', 'd']}) == ['a,b', 'a,c', 'a,d'] – на ваш вкус.
(0.3 балла) Напишите функцию filter_counts, которая получает на вход словарь (ключ – текст находки, значение – количество находок)1 и число – минимальное количество находок, и возвращает список тех находок, которые встретились не меньше заданного количества раз (т.е. для которых в словаре лежит число не меньше заданного).
(0.3 балла) Соберите из решений задач 2, 5, 6, 7, решение задания, которое я давал в начале семестра на автомат.
Хитрый читатель может догадаться, как воспользоваться заданиями 2 и 6 для получения такого словаря (1)