Проект собирает статьи с сайтов 7ya.ru, mama.ru, letidor.ru, индексирует их и позволяет выполнять булев поиск.
- Сбор (
crawler.py) → загружает статьи → сохраняет в БД. - Экспорт (
export_clean_text.py) → извлекаетclean_text→ пишет вdocs/. - Токенизация (
tokenizer.exe) → разбивает тексты на токены → пишет вtokens/. - Стемминг (
stemmer.exe) → нормализует токены → пишет вstems/. - Индексация (
indexer.exe) → строитboolean_index.txtизstems/. - Поиск (
searcher.exe) → принимает запрос → использует индекс → выводит результаты. Замечание: searcher.exe может выполнять как полный поиск с выводом ID документов, названий статей и ссылок на статьи при наличии данных в бд, так и поиск с выводом ID документов.
- Windows (PowerShell или CMD)
- Python 3.8+
- g++
- PostgreSQL 16
- Библиотеки Python (см.
crawler/requirements.txt) (Убедитесь, чтоpython,g++иpsqlдоступны из командной строки (добавлены в PATH).)
- Скачайте full_corpus_dump.zip (5,38 ГБ).
- Распакуйте его и расположите в корне проекта.
- Убедитесь, что PostgreSQL запущен. Создайте структуру таблицы:
psql -U postgres -h localhost -f setup_db.sql. - Загрузите данные:
psql -U postgres -h localhost -d search_corpus -f full_corpus_dump.sql. - Настройте файл .env: DB_PASSWORD=ваш_пароль_от_postgres. (Убедитесь в правильности написания config.yaml db).
- Запустите поиск:
cd searchersearcher.exe- выводит ID документов, название статьи и ссылку на статью;searcher.exe --ids-only- выводит только ID документов.
- Создайте базу данных:
psql -U postgres -h localhost -f setup_db.sql. - Настройте файл .env: DB_PASSWORD=ваш_пароль_от_postgres. (Убедитесь в правильности написания config.yaml db).
- Установите зависимости Python:
pip install -r crawler/requirements.txt. - Соберите C++ программы:
build_cpp.bat. - Запустите полный пайплайн (если PostgreSQL установлен в другом месте, отредактируйте путь вручную):
run_full_pipeline.bat. - Запустите поиск:
cd searchersearcher.exe- выводит ID документов, название статьи и ссылку на статью;searcher.exe --ids-only- выводит только ID документов.