Files
hotels/NATASHA_API_USAGE.md
Фёдор 0cf3297290 Проект аудита отелей: основные скрипты и документация
- Краулеры: smart_crawler.py, regional_crawler.py
- Аудит: audit_orel_to_excel.py, audit_chukotka_to_excel.py
- РКН проверка: check_rkn_registry.py, recheck_unclear_rkn.py
- Отчёты: create_orel_horizontal_report.py
- Обработка: process_all_hotels_embeddings.py
- Документация: README.md, DB_SCHEMA_REFERENCE.md
2025-10-16 10:52:09 +03:00

227 lines
6.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🤖 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!** 🚀