Kodomo

Пользователь

ДЗ №11

В пределах одного ДЗ оценка ставится как максимум из баллов за решённые задачи.

Требования к оформлению (за них оценка никогда не опускается более, чем на 2 балла; за них оценка никогда не падает ниже 7 баллов):

  • Файл с программой должен называться именно так, как указано в задании
  • Во всех программах должны быть содержательные имена переменных
  • Во всех программах не должно быть строк длиннее 75 символов, а если такие строки возникли, части таких строк нужно выносить в отдельные переменные или функции.
  • Функции должны сопровождаться docstring
  • Тело любой функции должно иметь длину не более 10 строк
  • Программа не должна содержать (в разумных пределах) дублирования кода

В данном задании пропуск любого из шагов, помеченных словом ЧИТ: приводит к потере 1 балла итоговой оценки.

  1. Дедлайн по ДЗ №10 продлён до 13:40 четверга, 4.12.2014
    • Как установить matplotlib, numpy, и много всего полезного. Варианты:
      1. Win: Открыть сайт Christoph Gohlke, найти там scipy-stack, скачать версию для вашей версии питона, запустить. Предупреждение: это довольно большой файл ~100M, который качается порядка получаса-часа (у Кристофа довольно небыстрый сервер).

      2. Win,Mac: Поставить anaconda – это ещё один дистрибутив питона, в котором всё включено. Вероятно, после этого у вас на компьютере заведётся зоопарк разнообразных питонов. Чтобы не страдать от избытка питонов лучше в таком случае других питонов снести.

      3. Lin: sudo apt-get install python-matplotlib

  1. Создайте в репозитории папку hw11

  2. (10 баллов) TF-IDF. Дедлайн 13:40 четверга, 11.12.2014

    1. Возмите небольшой корпус. (Если у вас нет ничего интересного, возмите, например, вот этот).

    2. Лемматизируйте его. ЧИТ: или работайте со словоформами

    3. Прочитайте его как набор тектсов, а каждый текст как список лемм. ЧИТ: или возмите всё готовенькое тут: import poni; print(poni.texts[0][:10])

    4. Составьте множество уникальных лемм всего корпуса. ЧИТ: или возмите всё готовенькое тут: import uniq; print(uniq.lemmas[:10])

    5. Составьте словарь idf, в котором для каждой леммы хранится log(N/df), где N – число документов, df – число документов, содержащих данную лемму.

    6. Составьте словарь tfidf, в котором ключом является пара из идентификатора документа и леммы, а значением является tfidf для этой пары. (tf считается просто как число вхождений леммы в данный документ).

    7. Выведите на экран 10 пар лемма-документ с наибольшим значением tf-idf.
  3. (10 баллов) TF-IDF (версия, более совместимая с лингвистикой). Дедлайн 13:40 четверга, 11.12.2014. Задание аналогично 1, но

    1. Вы можете использовать любую из более сложных метрик и для TF, и для IDF. (Единственный неприемлемый вариант: заменять IDF на частотный словарь, не привязанный к вашему корпусу)
    2. Вы можете использовать вместо лемм биграммы. Либо вы можете сделать общий словарь df, idf, tf, tf_idf для совокупностьи из всех лемм и всех биграмм.
    3. TF и top10 можно строить по одному документу.
    4. Выберите набор из 10 служебных слов, которые вы считали бы стоп-словами, и выведите TF-IDF и положение в упорядоченном списке для них.