Требуется реализовать "игрушечный" индексатор и поисковик по коллекции текстов. Данный индексатор должен производить все 4 этапа обработки корпуса и обеспечивать поиск по булевым выражениям с помощью построенного обратного индекса. Задание можно выполнять группой до двух человек.
- Сбор корпуса. В качестве корпуса можно использовать любой набор текстовых документов или страниц суммарным объемом не менее 50мб. В качестве корпуса, например, можно взять набор статей с Википедии, Хабра, цитаты с сайта bash.im и подобные источники текстовых статей. Сам корпус либо алгоритм его получения должны быть включены в ответ.
- Токенизация. Допускается упрощенный вариант токенизации и оставление только слов соответствующего языка, откидывая знаки препинания и другие символы, а также не выделяя отдельно именованные сущности.
- Лексическая обработка текста. Необходимо применить готовые реализации лемматизации/стемминга для приведения термов к унифицированному состоянию.
- Построение индекса. Для построения индекса необходимо использовать один из двух рассмотренных классических алгоритма (BSBI/SPIMI, либо их модификации).
- Поиск по готовому индексу должен осуществляться с помощью CLI, в который пользователь пишет булевый запрос.
- В качестве результатов поиска необходимо выводить часть документа или обеспечить другие возможности проверки правильности поиска.
- Допускается использование любого языка из следующего списка: Python 3, C#, C++, Kotlin. В случае желания использования других языков - уточните у преподавателя.
За задание ставится до 10 баллов путем суммы следующих пунктов:
- 0 баллов ставится безусловно, если преподаватель не может собрать и запустить приложение конвенциональными методами
- до 7 баллов ставится за общую законченность решения и правильность использования алгоритмов
- до 2 баллов ставится за общее качество кода (PEP8 etc) и реализацию.
- до 1 баллов ставится за технологичность решения (github, gradle/requirements.txt/cmake).
При выполнении задания разрешается использовать различные открытые библиотеки, реализующие побочные функции (стемминг, например), но при чрезмерном их использовании (from index_search import *) будет предложено задание переделать, реализовав все самостоятельно. Для этапа сбора корпуса не нужно писать свой краулер, достаточно скачать готовый корпус. Задание необходимо будет защищать на практике путем демонстрации работы и обсуждения решения с преподавателем.