Консольное приложение для парсинга данных о фильмах из TSV/CSV файлов (IMDB, MovieLens), построения связей, вычисления похожести фильмов и получения рекомендаций. Данные сохраняются в SQLite базу через Entity Framework Core.
Проект решает две основные задачи:
- Парсинг больших наборов данных (актёры, режиссёры, рейтинги, теги) и сохранение структурированной информации в локальную БД.
- Работа с данными — поиск фильмов по названию, актёру или тегу, построение топ-10 похожих фильмов, рекомендации на основе нескольких выбранных.
Алгоритм похожести учитывает:
- Общих актёров
- Совпадение режиссёра
- Общие теги
- Рейтинг фильма
- .NET 8 SDK
- Доступ в интернет для скачивания исходных данных (или готовая БД)
git clone https://github.com/yourusername/your-repo.git
cd Movie2
dotnet build
Получение данных
Приложение работает в двух режимах: parse (создание БД из исходных файлов) и run (работа с готовой БД).
Скачать готовую базу данных (рекомендуется)
Перейдите в Releases.
Скачайте movies.db.zip из последнего релиза.
Распакуйте архив в корень проекта (рядом с Movie2.csproj). Должен появиться файл movies.db.
Инструкция по использованию
Запуск производится из командной строки в корне проекта.
Режим парсинга (создать movies.db)
bash
dotnet run parse
Процесс займёт несколько минут в зависимости от мощности ПК. В результате появится файл movies.db.
Режим работы с готовой БД
bash
dotnet run run
После запуска откроется консольное меню:
text
=== МЕНЮ ===
1. Поиск фильма
2. Фильмы по актёру
3. Фильмы по тегу
4. Топ-5 по рейтингу
5. Статистика
6. Проверка связей (debug)
7. Выход
Пример работы:
Выберите пункт 1, введите название фильма (или его часть) — отобразится информация о режиссёре, актёрах, тегах и рейтинге.
Пункт 4 покажет 10 лучших фильмов по рейтингу.
ицензия
Этот проект распространяется под лицензией MIT.
См. файл LICENSE для подробностей.
Связь
Telegram
Дополнительная информация
База данных создаётся с помощью Entity Framework Core (провайдер SQLite).
Для ускорения парсинга используется многопоточная обработка с BlockingCollection и Parallel.ForEach.
Все вспомогательные словари (MoviesByPerson, MoviesByTag) очищаются после построения топов для экономии памяти.