{"id":16199874,"url":"https://github.com/bialger/simplesearchengine","last_synced_at":"2026-01-27T15:02:05.335Z","repository":{"id":253010800,"uuid":"842185644","full_name":"bialger/SimpleSearchEngine","owner":"bialger","description":"A simple full-text search engine on C++ with ranging BM25, factor TF-IDF. ITMO SE'27 first cource programming laboratory work.","archived":false,"fork":false,"pushed_at":"2024-08-14T14:54:31.000Z","size":77,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-23T11:32:14.724Z","etag":null,"topics":["bm-25","search","search-engine","student-project"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bialger.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-13T21:06:44.000Z","updated_at":"2024-09-04T20:35:38.000Z","dependencies_parsed_at":"2024-11-03T09:23:42.637Z","dependency_job_id":"a1df4d20-a668-4afc-9b42-fa0d898412d9","html_url":"https://github.com/bialger/SimpleSearchEngine","commit_stats":null,"previous_names":["bialger/simplesearchengine"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/bialger/SimpleSearchEngine","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bialger%2FSimpleSearchEngine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bialger%2FSimpleSearchEngine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bialger%2FSimpleSearchEngine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bialger%2FSimpleSearchEngine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bialger","download_url":"https://codeload.github.com/bialger/SimpleSearchEngine/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bialger%2FSimpleSearchEngine/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28815385,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-27T12:25:15.069Z","status":"ssl_error","status_checked_at":"2026-01-27T12:25:05.297Z","response_time":168,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bm-25","search","search-engine","student-project"],"created_at":"2024-10-10T09:28:33.007Z","updated_at":"2026-01-27T15:02:05.320Z","avatar_url":"https://github.com/bialger.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Лабораторная работа 11\n\nSimple Search Engine\n\n## Задача\n\nЗа этот год вы написали большой объем кода. В качестве последней лабораторной работы вам предлагается написать проcтой [полнотекстовый поиск](https://en.wikipedia.org/wiki/Full-text_search) над файлами с вашими предыдущими заданиями.\n\nРешение подобных задач предполагает подготовку [поискового индекса](https://en.wikipedia.org/wiki/Search_engine_indexing) (набора файлов с различными структурами данных) и поиска по полученным файлам.\n\nВ данной работе от вас потребуется реализовать один из самых простых вариантов поискового индекса - [инвертировнный индекс](https://en.wikipedia.org/wiki/Inverted_index).\n\nЗадача полнотекстового поиска так же подразумевает решение проблемы ранжирования (упорядочения найденных по запросу документов). От вас требуется реализовать функцию ранжироавние [BM25](https://en.wikipedia.org/wiki/Okapi_BM25), а в качестве фактора для нее [TF-IDF](https://en.wikipedia.org/wiki/Tf%E2%80%93idf).\n\nТаким образом вам необходимо реализовать два приложения - индексатор (подготовка поискового индекса) и поиск (программу осуществляющуюу не посредственно поиск по построенному индексу)\n\n## Требования\n\n### Требования к индексирующей программе\n\n- Консольное приложение. Структура аргументов командной строки - детали вашей реализации\n- Обходить все файлы по определенной директории рекурсивно\n- Осуществлять подготовку инвертированного индекса и сопутствующий файлов (если потребуется)\n- Формат индекса - ваша задача. Основное требование, его размер должен быть оптимизирован, в предположение что количество файлов может быть очень большим (например весь GitHub). Таким образом в данной части задания основной вашей задачей будет продумывание структур данных\n- Приведение слов к [нормальной форме](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) не требуется\n\n### Требования к поисковой программе\n\n- Консольное приложение, взаимодействие с пользователем через стандартные потоки ввода и вывода\n- Осуществлять поиск по построенному индексу\n- Ранжировать найденные документы согласно BM25\n- Выдавать в качестве результат список файлов с номерами строк где встречается данное слово\n- Поддерживать синтаксис запросов с 'AND' и 'OR'\n- Некорректный запрос должен приводить к выводу ошибки\n- Поиск регистронезависимый\n\n### Синтаксис запросов\n\nДолжен поддерживать скобки а также операции AND и OR (регистр имеет значение).\nТаким образом в качестве запроса выступают логические выражения. Разделитель между словами - пробел(ы)\n\nСледующие запросы считаются корректными\n\n - \"for\"\n - \"vector OR list\"\n - \"vector AND list\"\n - \"(for)\"\n - \"(vector OR list)\"\n - \"(vector AND list)\"\n - \"(while OR for) and vector\"\n - \"for AND and\"\n\nНекорректными запросами считаются\n - \"for AND\"\n - \"vector list\"\n - \"for AND OR list\"\n- \"vector Or list\"\n \n\n## Тесты\n\nТесты также являются частью задания, поэтому покрытие будет влиять на максимальный балл.\n\n## NB\n\nЭто ваша последняя работа в рамках данного курса. В ней разрешается использовать все части стандартной библиотеки, но запрещено использование внешних.\n\n\nКритерии оценивания\n    - Общая архитектура вашего решения\n    - Корректное использование языка и стандартной библиотеки\n    - Оптимальность работы как индексирующей так и поисковой части\n    - Оптимальной придуманных вам структур и форматов хранения\n\nНа Хабре есть [статья](https://habr.com/ru/articles/545634/) хорошо описывающая инвертировнный индекс и поиск по нему.\n\n\n## Deadline\n\n1. 15.05.24. 0.8\n2. 22.05.24. 0.65\n3. 29.05.24. 0.5\n\nМаксимальное количество баллов - 15\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbialger%2Fsimplesearchengine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbialger%2Fsimplesearchengine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbialger%2Fsimplesearchengine/lists"}