https://github.com/bialger/simplesearchengine
A simple full-text search engine on C++ with ranging BM25, factor TF-IDF. ITMO SE'27 first cource programming laboratory work.
https://github.com/bialger/simplesearchengine
bm-25 search search-engine student-project
Last synced: 5 months ago
JSON representation
A simple full-text search engine on C++ with ranging BM25, factor TF-IDF. ITMO SE'27 first cource programming laboratory work.
- Host: GitHub
- URL: https://github.com/bialger/simplesearchengine
- Owner: bialger
- License: gpl-3.0
- Created: 2024-08-13T21:06:44.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-08-14T14:54:31.000Z (over 1 year ago)
- Last Synced: 2025-05-19T14:04:39.575Z (8 months ago)
- Topics: bm-25, search, search-engine, student-project
- Language: C++
- Homepage:
- Size: 75.2 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Лабораторная работа 11
Simple Search Engine
## Задача
За этот год вы написали большой объем кода. В качестве последней лабораторной работы вам предлагается написать проcтой [полнотекстовый поиск](https://en.wikipedia.org/wiki/Full-text_search) над файлами с вашими предыдущими заданиями.
Решение подобных задач предполагает подготовку [поискового индекса](https://en.wikipedia.org/wiki/Search_engine_indexing) (набора файлов с различными структурами данных) и поиска по полученным файлам.
В данной работе от вас потребуется реализовать один из самых простых вариантов поискового индекса - [инвертировнный индекс](https://en.wikipedia.org/wiki/Inverted_index).
Задача полнотекстового поиска так же подразумевает решение проблемы ранжирования (упорядочения найденных по запросу документов). От вас требуется реализовать функцию ранжироавние [BM25](https://en.wikipedia.org/wiki/Okapi_BM25), а в качестве фактора для нее [TF-IDF](https://en.wikipedia.org/wiki/Tf%E2%80%93idf).
Таким образом вам необходимо реализовать два приложения - индексатор (подготовка поискового индекса) и поиск (программу осуществляющуюу не посредственно поиск по построенному индексу)
## Требования
### Требования к индексирующей программе
- Консольное приложение. Структура аргументов командной строки - детали вашей реализации
- Обходить все файлы по определенной директории рекурсивно
- Осуществлять подготовку инвертированного индекса и сопутствующий файлов (если потребуется)
- Формат индекса - ваша задача. Основное требование, его размер должен быть оптимизирован, в предположение что количество файлов может быть очень большим (например весь GitHub). Таким образом в данной части задания основной вашей задачей будет продумывание структур данных
- Приведение слов к [нормальной форме](https://ru.wikipedia.org/wiki/%D0%9B%D0%B5%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F) не требуется
### Требования к поисковой программе
- Консольное приложение, взаимодействие с пользователем через стандартные потоки ввода и вывода
- Осуществлять поиск по построенному индексу
- Ранжировать найденные документы согласно BM25
- Выдавать в качестве результат список файлов с номерами строк где встречается данное слово
- Поддерживать синтаксис запросов с 'AND' и 'OR'
- Некорректный запрос должен приводить к выводу ошибки
- Поиск регистронезависимый
### Синтаксис запросов
Должен поддерживать скобки а также операции AND и OR (регистр имеет значение).
Таким образом в качестве запроса выступают логические выражения. Разделитель между словами - пробел(ы)
Следующие запросы считаются корректными
- "for"
- "vector OR list"
- "vector AND list"
- "(for)"
- "(vector OR list)"
- "(vector AND list)"
- "(while OR for) and vector"
- "for AND and"
Некорректными запросами считаются
- "for AND"
- "vector list"
- "for AND OR list"
- "vector Or list"
## Тесты
Тесты также являются частью задания, поэтому покрытие будет влиять на максимальный балл.
## NB
Это ваша последняя работа в рамках данного курса. В ней разрешается использовать все части стандартной библиотеки, но запрещено использование внешних.
Критерии оценивания
- Общая архитектура вашего решения
- Корректное использование языка и стандартной библиотеки
- Оптимальность работы как индексирующей так и поисковой части
- Оптимальной придуманных вам структур и форматов хранения
На Хабре есть [статья](https://habr.com/ru/articles/545634/) хорошо описывающая инвертировнный индекс и поиск по нему.
## Deadline
1. 15.05.24. 0.8
2. 22.05.24. 0.65
3. 29.05.24. 0.5
Максимальное количество баллов - 15