- 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.
82 lines
2.3 KiB
TypeScript
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();
|
|
}
|
|
|
|
|