Программирование (python) для лингвистов дз — различия между версиями

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск
(Задание 2.)
(Задание 2.)
Строка 24: Строка 24:
 
# Т.е. на ориентированном графе, где узлы это статьи, а ссылки - это ребра, вы выполняете поиск в ширину от заданного узла и возвращаете все узлы графа, расттояние до которых не более чем depth. [https://en.wikipedia.org/wiki/Depth-first_search Поиск в ширину]
 
# Т.е. на ориентированном графе, где узлы это статьи, а ссылки - это ребра, вы выполняете поиск в ширину от заданного узла и возвращаете все узлы графа, расттояние до которых не более чем depth. [https://en.wikipedia.org/wiki/Depth-first_search Поиск в ширину]
 
# Обход ссылок выполняется в лексикографическом порядке по названию статей => При заданных depth и max_count результат работы метода однозначно определен.
 
# Обход ссылок выполняется в лексикографическом порядке по названию статей => При заданных depth и max_count результат работы метода однозначно определен.
# При парсинге каждой статьи для того, чтобы убрать html теги, используется функция pattern.web.plaintext.
 
# В результате парсинга между соседними словами должно быть 1 пробел.
 
# В результате парсинга весь текст переводится в lowercase, знаки пунктуации выкидываются
 
  
 
Интерфейс:
 
Интерфейс:
Строка 37: Строка 34:
  
  
2. Реализовать класс TextStatistics с конструктором, который принимает в качестве аргумента список '''заголовков''' статей, и реализует методы:
+
2. Реализовать класс TextStatistics с конструктором, который принимает в качестве аргумента список '''заголовков''' статей и парсит их содержимое:
 +
# При парсинге каждой статьи для того, чтобы убрать html теги, используется функция pattern.web.plaintext.
 +
# В результате парсинга между соседними словами должно быть 1 пробел.
 +
# В результате парсинга весь текст переводится в lowercase, знаки пунктуации выкидываются
 
# get_top_3grams - возвращает tuple, первым элемент которого - список 3-грамм в порядке убывания их частот, второй элемент - соотвественно список сколько раз встретилась каждая 3грамма. Подсчет идет по всему корпусу articles. При подсчете 3-грамм исключить из рассмотрения все числа и пунктуацию.
 
# get_top_3grams - возвращает tuple, первым элемент которого - список 3-грамм в порядке убывания их частот, второй элемент - соотвественно список сколько раз встретилась каждая 3грамма. Подсчет идет по всему корпусу articles. При подсчете 3-грамм исключить из рассмотрения все числа и пунктуацию.
 
# get_top_words - возвращает tuple, первым элемент которого - список слов в порядке убывания их частот, второй элемент - соотвественно список сколько раз встретилась каждое слово. Подсчет идет по всему корпусу articles. При подсчете слов исключить из рассмотрения все числа, предлоги, артикли и пунктуацию.
 
# get_top_words - возвращает tuple, первым элемент которого - список слов в порядке убывания их частот, второй элемент - соотвественно список сколько раз встретилась каждое слово. Подсчет идет по всему корпусу articles. При подсчете слов исключить из рассмотрения все числа, предлоги, артикли и пунктуацию.

Версия 13:29, 20 сентября 2017

Задание 1.

1. Реализовать функцию fibonacci(n) вычисления n-ого числа Фибоначчи со сложностью не хуже O(n) по вренени

2. Реализуйте иерархию наследования с нетривиальной структурой (т.е. иерархия должна образовывать дерево / лес), не менее 6 классов. Например: группы языков, систематика животного мира и т.д. Продемонстрируйте на примере применение полиморфизма к решению какой то задачи. (Например, обслуживание зоопарка в случае животных). P.S. укажите в комментариях к коду (например, в реализации класса зоопарка), в каком месте вы применяете полиформизм

3. Реализуйте средствами ООП паттерн поведения Singleton: класс UniqObject реализует метод класса create_object, который возращает объект UniqObject. Объект UniqObject должен всегда существовать в единственном экземпляре.


Сделанная домашняя работа выкладывается в репозиторий в папку homework_1, решение каждого задания - в отдельный файл task_<номер задания>.py


Задание 2.

Цель задания - научится самостоятельно ориентроваться в документации к библиотекам.

библиотека pattern

Вам необходимо написать программу, которая парсит статьи википедии (language=en) и считает по ним некоторые статистики.

1. Реализовать класс WikiParser с конструктором без аргументов и методом get_articles, который принимает название исходной статьи start и глубину поиска depth и возвращает список заголовков найденных статей (list of titles), но размером не более чем max_count.

  1. Т.е. на ориентированном графе, где узлы это статьи, а ссылки - это ребра, вы выполняете поиск в ширину от заданного узла и возвращаете все узлы графа, расттояние до которых не более чем depth. Поиск в ширину
  2. Обход ссылок выполняется в лексикографическом порядке по названию статей => При заданных depth и max_count результат работы метода однозначно определен.

Интерфейс:

  class WikiParser:
     def __init__(self):
        pass
     def get_articles(self, start, depth, max_count):
        pass


2. Реализовать класс TextStatistics с конструктором, который принимает в качестве аргумента список заголовков статей и парсит их содержимое:

  1. При парсинге каждой статьи для того, чтобы убрать html теги, используется функция pattern.web.plaintext.
  2. В результате парсинга между соседними словами должно быть 1 пробел.
  3. В результате парсинга весь текст переводится в lowercase, знаки пунктуации выкидываются
  4. get_top_3grams - возвращает tuple, первым элемент которого - список 3-грамм в порядке убывания их частот, второй элемент - соотвественно список сколько раз встретилась каждая 3грамма. Подсчет идет по всему корпусу articles. При подсчете 3-грамм исключить из рассмотрения все числа и пунктуацию.
  5. get_top_words - возвращает tuple, первым элемент которого - список слов в порядке убывания их частот, второй элемент - соотвественно список сколько раз встретилась каждое слово. Подсчет идет по всему корпусу articles. При подсчете слов исключить из рассмотрения все числа, предлоги, артикли и пунктуацию.


Интерфейс:

  class TextStatistics:
     def __init___(self, articles):
        pass
     def get_top_3grams(self, n):
        return (list_of_3grams_in_descending_order_by_freq, list_of_their_corresponding_freq)
     def get_top_words(self, n):
        return (list_of_words_in_descending_order_by_freq, list_of_their_corresponding_freq)


3. Реализовать класс Experiment с методом show_results, который используя WikiParser и TextStatistics:

  1. Выполняет парсинг статей википедии, начиная с "Natural language processing" на глубину depth=3 и max_count=500
  2. По полученному корпусу текстов считает топ-20 3-грамм и топ-20 слов.
  3. По статье "Natural language processing" (только по ней) считает топ-5 3-грамм и топ-5 слов.
  4. Печатает результаты эксперимента в структурированной форме

4. В комментариях после класса Experiment привести результаты выполнения метода show_results.

5. Результатом выполнения задания является код указанных классов и корректные результаты эксперимента