Система семантического поиска по решениям ФАС (Федеральной антимонопольной службы) о нарушениях в рекламе.
Это приложение позволяет искать похожие решения ФАС по смыслу, а не по точному совпадению слов. Вы можете ввести текст рекламы или описание нарушения, и система найдёт наиболее релевантные прецеденты из базы.
Запрос: "скидка 90% на всё"
Результат: Система найдёт решения о недостоверной рекламе со скидками, вводящей в заблуждение, некорректных сравнениях и т.д.
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ │ │ │ │ │
│ Frontend │────▶│ Backend │────▶│ Embeddings │
│ (Next.js) │ │ (FastAPI) │ │ (NumPy) │
│ │◀────│ │◀────│ │
└─────────────────┘ └─────────────────┘ └─────────────────┘
▲ │
│ ▼
│ ┌─────────────────┐
│ │ Sentence │
└───────────────│ Transformers │
│ (ML Model) │
└─────────────────┘
- Подготовка данных: CSV с 7283 решениями ФАС преобразуется в векторные представления (эмбеддинги)
- Поиск: Запрос пользователя также преобразуется в вектор
- Ранжирование: Система находит наиболее близкие векторы с помощью косинусного сходства
- Отображение: Результаты показываются в удобном интерфейсе
- Python 3.10+
- Node.js 18+
- ~1 ГБ свободного места
# 1. Клонируйте репозиторий
git clone https://github.com/Latarho/Legal.git
cd Legal
# 2. Настройте бэкенд
cd backend
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
# 3. Подготовьте данные (один раз, ~2 минуты)
python prepare_data.py
# 4. Запустите бэкенд
uvicorn main:app --reload --port 8000
# 5. В новом терминале — настройте фронтенд
cd ../frontend
npm install
npm run devОткройте http://localhost:3000 в браузере.
Legal/
├── backend/ # FastAPI сервер
│ ├── main.py # API endpoints
│ ├── prepare_data.py # Скрипт генерации эмбеддингов
│ ├── requirements.txt # Python зависимости
│ ├── README.md # Документация бэкенда
│ └── data/ # Сгенерированные данные
│ ├── embeddings.npy # Матрица эмбеддингов (7283 × 384)
│ └── cases.json # Данные решений
│
├── frontend/ # Next.js приложение
│ ├── src/
│ │ ├── app/ # Страницы и layouts
│ │ ├── components/ # React компоненты
│ │ └── lib/ # Утилиты и API клиент
│ ├── package.json
│ └── README.md # Документация фронтенда
│
├── fas_ad_practice_dataset.csv # Исходные данные ФАС
└── README.md # Этот файл
| Технология | Назначение |
|---|---|
| FastAPI | Веб-фреймворк |
| Sentence Transformers | Генерация эмбеддингов |
| paraphrase-multilingual-MiniLM-L12-v2 | ML модель для русского языка |
| NumPy | Векторные операции |
| Pandas | Обработка CSV |
| Технология | Назначение |
|---|---|
| Next.js 16 | React фреймворк |
| TypeScript | Типизация |
| Tailwind CSS 4 | Стилизация |
| shadcn/ui | UI компоненты |
POST /api/search
Content-Type: application/json
{
"query": "реклама алкоголя",
"top_k": 10
}{
"query": "реклама алкоголя",
"total_cases": 7283,
"results": [
{
"score": 0.85,
"defendant_name": "ООО Компания",
"violation_summary": "Нарушение требований к рекламе алкоголя...",
"FASbd_link": "https://br.fas.gov.ru/cases/..."
}
]
}Полная документация API: http://localhost:8000/docs
База содержит 7283 решения ФАС с полями:
| Поле | Описание |
|---|---|
Violation_Type |
Тип: substance (содержание) / placement (размещение) |
defendant_name |
Ответчик |
defendant_industry |
Отрасль |
ad_content_cited |
Цитата рекламы |
violation_summary |
Суть нарушения |
legal_provisions |
Нарушенные статьи |
FASbd_link |
Ссылка на решение ФАС |
- "Скидка 90% на всё" — недостоверная реклама скидок
- "Лучший банк года" — некорректные сравнения
- "Реклама алкоголя" — нарушения требований к рекламе алкоголя
- "СМС без согласия" — нарушения при рассылке рекламы
- "Недостоверная реклама лекарств" — нарушения в рекламе медицинских услуг
- Генерация эмбеддингов: ~2 минуты (один раз)
- Загрузка сервера: ~10 секунд
- Время поиска: ~50-100 мс
- Потребление памяти: ~500 МБ
# Backend
cd backend
pytest
# Frontend
cd frontend
npm test# Frontend
cd frontend
npm run lintMIT
- ФАС России за открытые данные
- Sentence Transformers за отличную библиотеку
- shadcn/ui за красивые компоненты