Files
hotels/NATASHA_API_USAGE.md

227 lines
6.6 KiB
Markdown
Raw Normal View History

# 🤖 NATASHA NER API - ИСПОЛЬЗОВАНИЕ В n8n
## 🚀 **ЗАПУСК API:**
```bash
cd /root/engine/public_oversight/hotels
python3 -m uvicorn natasha_ner_api:app --host 0.0.0.0 --port 8004 --reload
```
**API будет доступен на:** `http://localhost:8004`
---
## 📡 **ENDPOINTS:**
### **1. GET /** - Информация о сервисе
```bash
curl http://localhost:8004/
```
### **2. GET /health** - Проверка здоровья
```bash
curl http://localhost:8004/health
```
### **3. POST /extract** - Полное извлечение сущностей
```bash
curl -X POST http://localhost:8004/extract \
-H "Content-Type: application/json" \
-d '{"text": "ИП Фролов С.А. находится по адресу г. Петропавловск-Камчатский"}'
```
**Ответ:**
```json
{
"organizations": ["ИП"],
"persons": ["Фролов С.А."],
"locations": ["Петропавловск-Камчатский"],
"entities": [
{
"type": "ORG",
"text": "ИП",
"start": 0,
"end": 2
},
{
"type": "PER",
"text": "Фролов С.А.",
"start": 3,
"end": 14
},
{
"type": "LOC",
"text": "Петропавловск-Камчатский",
"start": 35,
"end": 59
}
],
"total_entities": 3
}
```
### **4. POST /extract_simple** - Упрощённое извлечение (для n8n)
```bash
curl -X POST http://localhost:8004/extract_simple \
-H "Content-Type: application/json" \
-d '{"text": "ООО Гостиница Певек, ИНН 1234567890"}'
```
**Ответ:**
```json
{
"organizations": ["ООО", "Гостиница Певек"],
"persons": [],
"locations": [],
"has_organizations": true,
"has_persons": false,
"has_locations": false,
"total": 2
}
```
---
## 🔗 **ИСПОЛЬЗОВАНИЕ В n8n:**
### **HTTP REQUEST NODE:**
**Настройки:**
- **Method:** POST
- **URL:** `http://localhost:8004/extract_simple`
- **Body:**
```json
{
"text": "{{ $json.quote }}",
"max_length": 5000
}
```
**Headers:**
- `Content-Type: application/json`
---
## 💻 **CODE NODE для обработки NER результатов:**
Используй готовый файл: `n8n_code_natasha_ner.js`
Он:
1. ✅ Проверяет критерии 1 и 2 (ИНН/ОГРН и Адрес)
2. ✅ Вызывает Natasha API
3. ✅ Комбинирует с результатами регулярок
4. ✅ Возвращает улучшенную оценку
---
## 🎯 **WORKFLOW В n8n:**
```
┌─────────────────────────────┐
│ 1. Generate 17 Criteria │
└──────────────┬──────────────┘
┌─────────────────────────────┐
│ 2. Loop Over Items │
└──────────────┬──────────────┘
┌─────────────────────────────┐
│ 3. PostgreSQL: Regex Search │
└──────────────┬──────────────┘
┌─────────────────────────────┐
│ 4. Code: Process Results │
└──────────────┬──────────────┘
┌─────────────────────────────┐
│ 5. Code: Natasha NER Check │ ← 🆕 Вызывает Natasha API
│ (n8n_code_natasha_ner.js)│
└──────────────┬──────────────┘
┌─────────────────────────────┐
│ 6. Aggregate Results │
└──────────────┬──────────────┘
┌─────────────────────────────┐
│ 7. Calculate Final Score │
└─────────────────────────────┘
```
---
## 📊 **ПРИМЕР РЕЗУЛЬТАТА:**
**Критерий 1 (ИНН/ОГРН):**
```json
{
"criterion_id": 1,
"criterion_name": "Юридическая идентификация",
"score": 0.0, // Регулярки не нашли
"ner_score": 1.0, // Natasha нашла!
"ner_entities": ["ООО Гостиница Певек", "ИП Фролов С.А."],
"final_score": 1.0, // MAX(0.0, 1.0) = 1.0
"method": "Natasha NER"
}
```
**Критерий 2 (Адрес):**
```json
{
"criterion_id": 2,
"criterion_name": "Адрес",
"score": 1.0, // Регулярки нашли
"ner_score": 1.0, // Natasha тоже нашла!
"ner_entities": ["Петропавловск-Камчатский", "ул. Пограничная"],
"final_score": 1.0, // MAX(1.0, 1.0) = 1.0
"method": "Гибрид (Regex + NER)"
}
```
---
## ⚡ **ПРЕИМУЩЕСТВА:**
**Natasha находит организации**, даже если нет ИНН/ОГРН
**Natasha находит адреса**, даже если формат нестандартный
**Работает через HTTP** - легко интегрировать в n8n
**Быстрая** - обрабатывает текст за ~100-200ms
**Локальная** - не нужен интернет
---
## 🔧 **НАСТРОЙКА В n8n:**
### **Вариант 1: Используй готовый Code Node**
Вставь код из `n8n_code_natasha_ner.js` - он всё сделает автоматически!
### **Вариант 2: HTTP Request Node**
1. Добавь **HTTP Request Node**
2. URL: `http://localhost:8004/extract_simple`
3. Method: POST
4. Body: `{"text": "{{ $json.quote }}"}`
5. Обработай ответ в следующей Code Node
---
## 📞 **ПРОВЕРКА РАБОТЫ:**
```bash
# Проверка здоровья
curl http://localhost:8004/health
# Тест на русском тексте
curl -X POST http://localhost:8004/extract_simple \
-H "Content-Type: application/json" \
-d '{"text": "Гостиница Певек находится по адресу г. Певек, ул. Ленина, 10"}'
```
**Готово! Natasha API запущен на порту 8004!** 🚀