Программирование (python) для лингвистов дз
Задание 1.
1. Реализовать функцию fibonacci(n) вычисления n-ого числа Фибоначчи со сложностью не хуже O(n) по вренени
2. Реализуйте иерархию наследования с нетривиальной структурой (т.е. иерархия должна образовывать дерево / лес), не менее 6 классов. Например: группы языков, систематика животного мира и т.д. Продемонстрируйте на примере применение полиморфизма к решению какой то задачи. (Например, обслуживание зоопарка в случае животных). P.S. укажите в комментариях к коду (например, в реализации класса зоопарка), в каком месте вы применяете полиформизм
3. Реализуйте средствами ООП паттерн поведения Singleton: класс UniqObject реализует метод класса create_object, который возращает объект UniqObject. Объект UniqObject должен всегда существовать в единственном экземпляре.
Сделанная домашняя работа выкладывается в репозиторий в папку homework_1, решение каждого задания - в отдельный файл task_<номер задания>.py
Задание 2.
Цель задания - научится самостоятельно ориентроваться в документации к библиотекам.
Вам необходимо написать программу, которая парсит статьи википедии (language=en) и считает по ним некоторые статистики.
1. Реализовать класс WikiParser с конструктором без аргументов и методом get_articles(start, depth), который принимает название исходной статьи start и глубину поиска depth и возвращает список найденных статей (список строк, то есть каждой статье соотвествует одна строка).
1. Например, если depth=3, то "start article" -(link)-> "article1" -(link)-> "article2" -(link)-> "article3", при условии, что статьи не повторяются. 2. При парсинге каждой статьи для того, чтобы убрать html теги, используется функция pattern.web.plaintext. 3. В результате парсинга между соседними словами должно быть 1 пробел. 4. В результате парсинга весь текст переводится в lowercase, знаки пунктуации выкидываются
Интерфейс:
class WikiParser: def __init__(self): pass def get_articles(self, start, depth): pass
2. Реализовать класс TextStatistics с конструктором, который принимает в качестве аргумента список статей (список строк) - articles, и реализует методы:
1. get_top_3grams - возвращает tuple, первым элемент которого - список 3-грамм в порядке убывания их частот, второй элемент - соотвественно список сколько раз встретилась каждая 3грамма. Подсчет идет по всему корпусу articles. При подсчете 3-грамм исключить из рассмотрения все числа и пунктуацию. 2. get_top_words - возвращает tuple, первым элемент которого - список слов в порядке убывания их частот, второй элемент - соотвественно список сколько раз встретилась каждое слово. Подсчет идет по всему корпусу articles. При подсчете слов исключить из рассмотрения все числа, предлоги, артикли и пунктуацию.
Интерфейс:
class TextStatistics: def __init___(self, articles): pass
def get_top_3grams(self, n): pass
def get_top_words(self, n): pass
3. Реализовать класс Experiment с методом show_results, который используя WikiParser и TextStatistics:
1. Выполняет парсинг статей википедии, начиная с "Natural language processing" на глубину depth=3 2. По полученному корпусу текстов считает топ-20 3-грамм и топ-20 слов. 3. По статье "Natural language processing" (только по ней) считает топ-5 3-грамм и топ-5 слов. 4. Печатает результаты эксперимента в структурированной форме
4. В комментариях после класса Experiment привести результаты выполнения метода show_results.
5. Результатом выполнения задания является код указанных классов и корректные результаты эксперимента