Files
OllaHub/lib/text-normalization.ts
T
Evandro Fonseca Junior 84ea2dec19 feat: add emoji-regex and remove-accents dependencies; enhance chat and setup pages
- Added `emoji-regex` and `remove-accents` packages to improve text processing capabilities.
- Implemented automatic Ollama startup in the chat page for better user experience.
- Enhanced setup page to include GPU selection based on hardware specifications.
- Updated chat input to support real-time validation and improved user feedback.
- Refactored message handling in chat to incorporate new processing features.
2025-11-26 16:12:16 -03:00

82 lines
2.3 KiB
TypeScript

import removeAccents from 'remove-accents';
/**
* Normaliza texto removendo acentos, padronizando caixa e limpando caracteres especiais
*
* @param text - Texto a ser normalizado
* @returns Texto normalizado
*/
export function normalizeText(text: string): string {
if (!text || typeof text !== 'string') {
return '';
}
// Remove acentos
let normalized = removeAccents(text);
// Padroniza para lowercase
normalized = normalized.toLowerCase();
// Remove caracteres especiais não alfanuméricos (exceto espaços e pontuação básica)
// Mantém: letras, números, espaços, ponto, vírgula, interrogação, exclamação, dois pontos, ponto e vírgula
normalized = normalized.replace(/[^\w\s.,?!:;]/g, '');
// Normaliza espaços em branco múltiplos para um único espaço
normalized = normalized.replace(/\s+/g, ' ');
return normalized.trim();
}
/**
* Normaliza texto de forma mais agressiva para busca
* Remove pontuação e normaliza completamente
*
* @param text - Texto a ser normalizado para busca
* @returns Texto normalizado para busca
*/
export function normalizeForSearch(text: string): string {
if (!text || typeof text !== 'string') {
return '';
}
// Remove acentos
let normalized = removeAccents(text);
// Padroniza para lowercase
normalized = normalized.toLowerCase();
// Remove toda pontuação e caracteres especiais
normalized = normalized.replace(/[^\w\s]/g, '');
// Normaliza espaços em branco múltiplos para um único espaço
normalized = normalized.replace(/\s+/g, ' ');
return normalized.trim();
}
/**
* Preserva nomes próprios quando possível (versão menos agressiva)
* Mantém capitalização inicial de palavras que podem ser nomes próprios
*
* @param text - Texto a ser normalizado
* @returns Texto normalizado preservando possível capitalização de nomes
*/
export function normalizeTextPreserveCase(text: string): string {
if (!text || typeof text !== 'string') {
return '';
}
// Remove acentos
let normalized = removeAccents(text);
// Remove caracteres especiais não alfanuméricos (exceto espaços e pontuação básica)
normalized = normalized.replace(/[^\w\s.,?!:;]/g, '');
// Normaliza espaços em branco múltiplos para um único espaço
normalized = normalized.replace(/\s+/g, ' ');
return normalized.trim();
}