Files
crm.clientright.ru/n8n_ocr_code_final.js
Fedor 01c4fe80b5 chore: snapshot current working tree changes
Save all currently accumulated repository changes as a backup snapshot for Gitea so no local work is lost.
2026-03-26 14:19:01 +03:00

83 lines
3.4 KiB
JavaScript
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.

// Получаем результат OCR
const ocrResult = $input.item.json;
// Собираем текст со всех страниц
let fullText = '';
if (ocrResult.pages_data && Array.isArray(ocrResult.pages_data)) {
fullText = ocrResult.pages_data
.map(page => page.ocr_text || '')
.filter(text => text.trim() !== '')
.join('\n\n'); // Разделяем страницы двумя переносами строки
}
// Функция очистки от мусора
function cleanOCRText(text) {
if (!text) return '';
return text
// Убираем лишние переносы строк (более 2 подряд)
.replace(/\n{3,}/g, '\n\n')
// Убираем лишние пробелы (более 2 подряд)
.replace(/ {3,}/g, ' ')
// Убираем пробелы в начале и конце строк
.split('\n')
.map(line => line.trim())
.filter(line => line !== '')
.join('\n')
// Убираем специальные символы OCR мусора (но сохраняем нужные)
.replace(/[©•»®™✓→←¤…›«""―''→←◆◇■□●○◎☆★☑☐⚫️×]/g, ' ')
// Убираем повторяющиеся символы пунктуации
.replace(/[.,;:]{2,}/g, (match) => match[0])
// Финальная очистка лишних пробелов
.replace(/\s+/g, ' ')
.trim();
}
// Очищаем текст
const cleanedText = cleanOCRText(fullText);
// ⬇️ ВАЖНО: Преобразуем pages_data в JSON строку для PostgreSQL
// PostgreSQL не понимает JavaScript объекты, нужна строка JSON
let pagesDataJson = '[]'; // По умолчанию пустой массив
if (ocrResult.pages_data && Array.isArray(ocrResult.pages_data)) {
pagesDataJson = JSON.stringify(ocrResult.pages_data);
} else if (ocrResult.pages_data) {
pagesDataJson = JSON.stringify(ocrResult.pages_data);
}
// Проверяем, что uuid есть (он должен быть из предыдущего шага)
// Если его нет - берем из ocrResult или выдаем ошибку
let fileUuid = ocrResult.uuid;
if (!fileUuid) {
// Попробуем найти uuid в других местах
fileUuid = ocrResult.file_uuid || ocrResult.id || null;
if (!fileUuid) {
throw new Error('UUID файла не найден! Убедитесь, что UUID передан из предыдущего шага.');
}
}
// Возвращаем результат
return [{
json: {
// Сохраняем все исходные данные
...ocrResult,
// ОБЯЗАТЕЛЬНЫЕ поля для SQL запроса
uuid: fileUuid, // ⬅️ UUID должен быть обязательно!
cleaned_text: cleanedText || '', // ⬅️ Очищенный текст (или пустая строка)
page_count: ocrResult.pages_data?.length || 0, // ⬅️ Количество страниц
pages_data_json: pagesDataJson, // ⬅️ JSON строка (всегда валидная)
// Дополнительные поля (опционально)
original_text: fullText || '',
// Оригинальная структура (как объект - для других нужд)
pages_data: ocrResult.pages_data || []
}
}];