Проект аудита отелей: основные скрипты и документация
- Краулеры: 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:
200
N8N_HTTP_REQUEST_NATASHA.md
Normal file
200
N8N_HTTP_REQUEST_NATASHA.md
Normal file
@@ -0,0 +1,200 @@
|
||||
# 🔗 HTTP REQUEST для Natasha NER в n8n
|
||||
|
||||
## 📡 **НАСТРОЙКИ HTTP REQUEST NODE:**
|
||||
|
||||
### **Базовая информация:**
|
||||
- **Name:** Natasha NER Check
|
||||
- **Method:** POST
|
||||
- **URL:** `http://localhost:8004/extract_simple`
|
||||
|
||||
### **Headers:**
|
||||
```
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
### **Body (JSON):**
|
||||
```json
|
||||
{
|
||||
"text": "{{ $json.quote }}",
|
||||
"max_length": 5000
|
||||
}
|
||||
```
|
||||
|
||||
### **Options:**
|
||||
- **Timeout:** 30000 (30 секунд)
|
||||
- **Response Format:** JSON
|
||||
|
||||
---
|
||||
|
||||
## 📋 **ГОТОВЫЙ cURL ДЛЯ ИМПОРТА:**
|
||||
|
||||
### **Вариант 1: Для локального n8n (на том же сервере)**
|
||||
|
||||
```bash
|
||||
curl -X POST 'http://localhost:8004/extract_simple' \
|
||||
-H 'Content-Type: application/json' \
|
||||
-H 'Accept: application/json' \
|
||||
-d '{
|
||||
"text": "{{ $json.quote }}",
|
||||
"max_length": 5000
|
||||
}'
|
||||
```
|
||||
|
||||
### **Вариант 2: Если n8n на другом сервере**
|
||||
|
||||
Нужно открыть порт 8004 или использовать SSH туннель:
|
||||
|
||||
```bash
|
||||
# SSH туннель (запусти на машине с n8n)
|
||||
ssh -L 8004:localhost:8004 root@147.45.146.17
|
||||
|
||||
# Затем в n8n используй:
|
||||
# URL: http://localhost:8004/extract_simple
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 **ИМПОРТ В n8n (ПОШАГОВО):**
|
||||
|
||||
### **ШАГ 1: Создай HTTP Request Node**
|
||||
1. Добавь ноду **"HTTP Request"**
|
||||
2. Назови: **"Natasha NER"**
|
||||
|
||||
### **ШАГ 2: Настрой Authentication**
|
||||
- **Authentication:** None (API без авторизации)
|
||||
|
||||
### **ШАГ 3: Настрой Request**
|
||||
- **Method:** POST
|
||||
- **URL:** `http://localhost:8004/extract_simple`
|
||||
|
||||
### **ШАГ 4: Настрой Headers**
|
||||
Добавь 2 заголовка:
|
||||
1. `Content-Type`: `application/json`
|
||||
2. `Accept`: `application/json`
|
||||
|
||||
### **ШАГ 5: Настрой Body**
|
||||
- **Body Content Type:** JSON
|
||||
- **Specify Body:** Using JSON
|
||||
- **JSON:**
|
||||
```json
|
||||
{
|
||||
"text": "={{ $json.quote }}",
|
||||
"max_length": 5000
|
||||
}
|
||||
```
|
||||
|
||||
### **ШАГ 6: Настрой Options**
|
||||
- **Timeout:** 30000
|
||||
- **Response Format:** Auto-detect (JSON)
|
||||
|
||||
---
|
||||
|
||||
## 📊 **ОЖИДАЕМЫЙ ОТВЕТ:**
|
||||
|
||||
```json
|
||||
{
|
||||
"organizations": ["ИП", "Фролов С.А."],
|
||||
"persons": ["Иван Петров"],
|
||||
"locations": ["Петропавловск-Камчатский", "Пограничная"],
|
||||
"has_organizations": true,
|
||||
"has_persons": true,
|
||||
"has_locations": true,
|
||||
"total": 4
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 💻 **CODE NODE ПОСЛЕ HTTP REQUEST:**
|
||||
|
||||
```javascript
|
||||
// Обрабатываем ответ от Natasha API
|
||||
|
||||
const criterion = $input.item.json;
|
||||
const nerResult = $('Natasha NER').first().json;
|
||||
|
||||
// Определяем NER score в зависимости от критерия
|
||||
let nerScore = 0.0;
|
||||
let nerEntities = [];
|
||||
|
||||
if (criterion.criterion_id === 1) {
|
||||
// Критерий 1: Организации
|
||||
if (nerResult.has_organizations) {
|
||||
nerScore = 1.0;
|
||||
nerEntities = nerResult.organizations;
|
||||
}
|
||||
} else if (criterion.criterion_id === 2) {
|
||||
// Критерий 2: Адреса
|
||||
if (nerResult.has_locations) {
|
||||
nerScore = 1.0;
|
||||
nerEntities = nerResult.locations;
|
||||
}
|
||||
}
|
||||
|
||||
// Комбинируем с regex score
|
||||
const regexScore = parseFloat(criterion.score) || 0.0;
|
||||
const finalScore = Math.max(regexScore, nerScore);
|
||||
|
||||
return {
|
||||
json: {
|
||||
...criterion,
|
||||
ner_score: nerScore,
|
||||
ner_entities: nerEntities,
|
||||
final_score: finalScore,
|
||||
method: finalScore === nerScore ? 'Natasha NER' :
|
||||
finalScore === regexScore ? 'Регулярные выражения' :
|
||||
'Гибрид'
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔧 **ПРОВЕРКА ДОСТУПНОСТИ:**
|
||||
|
||||
```bash
|
||||
# Локально (на сервере)
|
||||
curl http://localhost:8004/health
|
||||
|
||||
# Извне (если порт открыт)
|
||||
curl http://147.45.146.17:8004/health
|
||||
|
||||
# Если не работает извне - открой порт в firewall:
|
||||
# sudo ufw allow 8004/tcp
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🚀 **БЫСТРЫЙ ТЕСТ:**
|
||||
|
||||
```bash
|
||||
# Тест с реальным текстом
|
||||
curl -X POST 'http://localhost:8004/extract_simple' \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d '{
|
||||
"text": "Гостиница Певек, ИНН 8707003759, ОГРН 1028700516476. Адрес: г. Певек, ул. Ленина, 10. Директор Иван Иванов.",
|
||||
"max_length": 5000
|
||||
}'
|
||||
```
|
||||
|
||||
**Ожидаемый ответ:**
|
||||
```json
|
||||
{
|
||||
"organizations": ["Гостиница Певек"],
|
||||
"persons": ["Иван Иванов"],
|
||||
"locations": ["Певек", "ул. Ленина"],
|
||||
"has_organizations": true,
|
||||
"has_persons": true,
|
||||
"has_locations": true,
|
||||
"total": 4
|
||||
}
|
||||
```
|
||||
|
||||
**Готово! Используй этот cURL в n8n!** 🚀
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user