Save all currently accumulated repository changes as a backup snapshot for Gitea so no local work is lost.
83 lines
3.4 KiB
JavaScript
83 lines
3.4 KiB
JavaScript
// Получаем результат 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 || []
|
||
}
|
||
}];
|