Проект аудита отелей: основные скрипты и документация
- Краулеры: 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
This commit is contained in:
226
NATASHA_API_USAGE.md
Normal file
226
NATASHA_API_USAGE.md
Normal file
@@ -0,0 +1,226 @@
|
||||
# 🤖 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!** 🚀
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user