lsdf's picture
Initial commit: SEO AI Editor MVP with BERT, BM25 and N-gram analysis
e0ad138
|
raw
history blame
9.03 kB
# API Документация
## Обзор
SEO AI Editor предоставляет REST API для анализа текстов. API построен на FastAPI и автоматически генерирует интерактивную документацию.
## Базовый URL
```
http://127.0.0.1:8001
```
## Endpoints
### GET `/`
Возвращает главную страницу приложения (HTML).
**Ответ:** HTML страница с интерфейсом
---
### POST `/analyze`
Выполняет комплексный анализ текста с использованием N-грамм, BM25 и BERT.
#### Запрос
**Content-Type:** `application/json`
**Тело запроса:**
```json
{
"target_text": "string (обязательно)",
"competitors": ["string"] (обязательно, может быть пустым массивом),
"keywords": ["string"] (обязательно, может быть пустым массивом),
"language": "string" (опционально, по умолчанию "en")
}
```
**Параметры:**
| Параметр | Тип | Обязательный | Описание |
|----------|-----|--------------|----------|
| `target_text` | string | Да | Текст пользователя для анализа |
| `competitors` | array[string] | Да | Массив текстов конкурентов |
| `keywords` | array[string] | Да | Массив ключевых фраз (каждая фраза - отдельный элемент) |
| `language` | string | Нет | Код языка: `en`, `ru`, `de`, `es`, `it` |
#### Ответ
**Статус:** 200 OK
**Content-Type:** `application/json`
```json
{
"ngram_stats": {
"unigrams": [
{
"ngram": "string",
"target_count": 0,
"competitor_avg": 0.0
}
],
"bigrams": [...],
"trigrams": [...],
"quadgrams": [...]
},
"bm25_recommendations": [
{
"word": "string",
"type": "1-gram" | "2-gram" | "3-gram",
"my_score": 0.0,
"avg_comp_score": 0.0,
"action": "ok" | "add" | "remove",
"count": 0
}
],
"bert_analysis": {
"global_scores": [
{
"name": "string",
"score": 0.0,
"is_me": true
}
],
"detailed": [
{
"phrase": "string",
"my_max_score": 0.0,
"comp_max_score": 0.0,
"status": "ok" | "good" | "warning" | "bad",
"recommendation": "string",
"my_top_chunks": [
{
"text": "string",
"score": 0.0
}
],
"comp_top_chunks": [
{
"text": "string",
"score": 0.0,
"source": "string"
}
]
}
]
}
}
```
#### Структура ответа
##### ngram_stats
Статистика по N-граммам (1-4 слова).
**Поля:**
- `ngram` - текст N-граммы (лемматизированный)
- `target_count` - количество вхождений в целевом тексте
- `competitor_avg` - среднее количество вхождений у конкурентов
**Сортировка:** По максимальному значению (target_count или competitor_avg)
##### bm25_recommendations
Рекомендации по оптимизации частоты слов/фраз с использованием алгоритма BM25.
**Особенности алгоритма:**
- **Полная декомпозиция фраз**: Каждая ключевая фраза автоматически разбивается на все возможные под-н-граммы длиной от 1 до 3 слов
- Пример: фраза "chicken road casino" анализируется как:
- Униграммы: "chicken", "road", "casino"
- Биграммы: "chicken road", "road casino"
- Триграммы: "chicken road casino"
- Это позволяет находить не только точные совпадения, но и частичные вхождения ключевых фраз
- Дубликаты автоматически удаляются
**Поля:**
- `word` - слово или фраза (лемматизированная)
- `type` - тип: "1-gram", "2-gram", "3-gram"
- `my_score` - BM25 score в целевом тексте
- `avg_comp_score` - средний BM25 score у конкурентов
- `action` - рекомендуемое действие:
- `"ok"` - частота в норме
- `"add"` - нужно добавить (ваш score ниже среднего конкурентов)
- `"remove"` - нужно убрать (ваш score значительно выше среднего конкурентов)
- `count` - рекомендуемое количество добавлений/удалений (рассчитывается на основе разницы скоров)
**Пороги для действий:**
- Униграммы: порог 0.5
- Биграммы: порог 0.25
- Триграммы: порог 0.15
**Сортировка:**
1. Сначала проблемные рекомендации (add/remove)
2. Затем по длине фразы (длинные фразы важнее)
3. Затем алфавитно
##### bert_analysis
Семантический анализ с использованием BERT.
**global_scores:**
- `name` - название текста ("Мой текст" или "Конкурент #N")
- `score` - средний максимальный score по всем ключевым фразам (0.0 - 1.0)
- `is_me` - флаг, является ли это целевым текстом
**detailed:**
Для каждой ключевой фразы:
- `phrase` - исходная ключевая фраза
- `my_max_score` - максимальный score в целевом тексте (0.0 - 1.0)
- `comp_max_score` - максимальный score у конкурентов
- `status` - статус:
- `"good"` - score >= 0.7
- `"ok"` - 0.5 <= score < 0.7
- `"warning"` - score < 0.5 или конкуренты лучше на 0.1+
- `"bad"` - score < 0.5
- `recommendation` - текстовое описание рекомендации
- `my_top_chunks` - топ-5 наиболее релевантных предложений из целевого текста
- `comp_top_chunks` - топ-5 наиболее релевантных предложений у конкурентов (с указанием источника)
#### Примеры запросов
**cURL:**
```bash
curl -X POST "http://127.0.0.1:8001/analyze" \
-H "Content-Type: application/json" \
-d '{
"target_text": "Это мой текст для анализа SEO.",
"competitors": ["Текст конкурента номер один.", "Текст конкурента номер два."],
"keywords": ["SEO анализ", "текст"],
"language": "ru"
}'
```
**Python:**
```python
import requests
response = requests.post(
"http://127.0.0.1:8001/analyze",
json={
"target_text": "Это мой текст для анализа SEO.",
"competitors": ["Текст конкурента номер один.", "Текст конкурента номер два."],
"keywords": ["SEO анализ", "текст"],
"language": "ru"
}
)
data = response.json()
print(data)
```
**JavaScript:**
```javascript
fetch('http://127.0.0.1:8001/analyze', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
target_text: "Это мой текст для анализа SEO.",
competitors: ["Текст конкурента номер один.", "Текст конкурента номер два."],
keywords: ["SEO анализ", "текст"],
language: "ru"
})
})
.then(response => response.json())
.then(data => console.log(data));
```
#### Ошибки
**400 Bad Request**
Неверный формат запроса или отсутствуют обязательные поля.
**422 Unprocessable Entity**
Ошибка валидации данных (например, неверный код языка).
**500 Internal Server Error**
Внутренняя ошибка сервера (проблемы с моделями, памятью и т.д.).
## Интерактивная документация
После запуска приложения доступны:
- **Swagger UI**: `http://127.0.0.1:8001/docs`
- **ReDoc**: `http://127.0.0.1:8001/redoc`
Эти интерфейсы позволяют:
- Просматривать все endpoints
- Тестировать API прямо в браузере
- Видеть схемы данных
- Просматривать примеры запросов и ответов