REMOVE_URLS - Remoção de URLs de Texto
O que é esta operação?
A operação REMOVE_URLS do Content Cleaner é responsável por identificar e remover todas as URLs (endereços web) de um texto, incluindo links HTTP e HTTPS em qualquer formato.
Por que esta operação existe?
Em muitos cenários de processamento de texto, URLs podem ser consideradas ruído ou informação não desejada. A operação REMOVE_URLS existe para:
- Limpeza de Conteúdo: Remover links de textos copiados da web ou redes sociais
- Proteção de Privacidade: Eliminar URLs que possam conter informações sensíveis ou tracking
- Análise de Texto Puro: Preparar conteúdo para análise sem influência de links externos
- Segurança: Remover URLs potencialmente maliciosas de conteúdo não confiável
Como funciona internamente?
Quando a operação REMOVE_URLS é executada, o sistema:
- Recebe o texto: Obtém o conteúdo da variável especificada em
inputVariable - Aplica regex de URLs: Utiliza expressão regular para identificar padrões de URLs completas
- Conta ocorrências: Registra quantas URLs foram encontradas para estatísticas
- Remove as URLs: Substitui todas as URLs encontradas por string vazia
- Atualiza estatísticas: Incrementa o contador
urlsRemovednas estatísticas - Retorna resultado: Armazena o texto limpo na variável de saída
Código interno (content-cleaner-executor.service.ts:216-221):
// Remove URLs
if (config.removeUrls !== false) {
const urlRegex = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/gi;
const matches = cleaned.match(urlRegex);
stats.urlsRemoved = matches ? matches.length : 0;
cleaned = cleaned.replace(urlRegex, '');
}
Quando você DEVE usar esta operação?
Use REMOVE_URLS sempre que precisar limpar texto contendo links indesejados:
Casos de uso
- Processamento de Mensagens de Spam: "Remover links suspeitos de mensagens antes de análise"
- Extração de Conteúdo de Artigos: "Limpar URLs de texto copiado da web para análise pura"
- Preparação para Análise de Sentimento: "Remover links que não agregam valor à análise emocional"
- Moderação de Conteúdo: "Filtrar mensagens removendo URLs potencialmente maliciosas"
Quando NÃO usar REMOVE_URLS
- Links são Informação Relevante: Se as URLs fazem parte essencial do conteúdo (ex: catálogos de produtos)
- Extração de Links Necessária: Use um extrator de URLs ao invés, se precisar dos links
- Validação de URLs: Use um validador específico se o objetivo é verificar, não remover
Parâmetros Detalhados
inputVariable (string, obrigatório)
O que é: Nome da variável que contém o texto a ser limpo.
Padrão: "raw_content"
Flow completo para testar:
{
"name": "Teste Remove URLs",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "variable_1",
"type": "variable",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Definir Texto",
"parameters": {
"variableName": "raw_content",
"variableValue": "Confira nosso site https://exemplo.com e visite http://www.loja.com.br/produtos para mais informações!"
}
}
},
{
"id": "cleaner_1",
"type": "content_cleaner",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Remover URLs",
"parameters": {
"inputVariable": "raw_content",
"removeUrls": true,
"outputVariable": "cleaned_content",
"returnStats": true,
"statsVariable": "cleaning_stats"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Mostrar Resultado",
"parameters": {
"message": "Texto limpo: {{cleaned_content}}\n\nURLs removidas: {{cleaning_stats.urlsRemoved}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "variable_1" },
{ "source": "variable_1", "target": "cleaner_1" },
{ "source": "cleaner_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: O sistema deve retornar "Texto limpo: Confira nosso site e visite para mais informações!" e "URLs removidas: 2"
removeUrls (boolean, opcional)
O que é: Ativa ou desativa a remoção de URLs. Por padrão está ATIVADA (true).
Padrão: true
Flow completo para testar:
{
"name": "Teste Desativar Remove URLs",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "variable_1",
"type": "variable",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Definir Texto",
"parameters": {
"variableName": "raw_content",
"variableValue": "Site: https://exemplo.com"
}
}
},
{
"id": "cleaner_1",
"type": "content_cleaner",
"position": { "x": 500, "y": 100 },
"data": {
"label": "NÃO Remover URLs",
"parameters": {
"inputVariable": "raw_content",
"removeUrls": false,
"outputVariable": "cleaned_content"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Mostrar Resultado",
"parameters": {
"message": "Texto: {{cleaned_content}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "variable_1" },
{ "source": "variable_1", "target": "cleaner_1" },
{ "source": "cleaner_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: O sistema deve preservar a URL e retornar "Texto: Site: https://exemplo.com"
outputVariable (string, opcional)
O que é: Nome da variável onde o texto limpo será armazenado.
Padrão: "cleaned_content"
returnStats (boolean, opcional)
O que é: Se true, retorna estatísticas detalhadas da limpeza.
Padrão: false
statsVariable (string, opcional)
O que é: Nome da variável onde as estatísticas serão armazenadas (requer returnStats: true).
Padrão: Não armazena se não especificado
Parâmetros
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| inputVariable | string | Sim | Variável contendo o texto a limpar (padrão: "raw_content") |
| removeUrls | boolean | Não | Remove URLs do texto (padrão: true) |
| outputVariable | string | Não | Variável para armazenar resultado (padrão: "cleaned_content") |
| returnStats | boolean | Não | Retornar estatísticas detalhadas (padrão: false) |
| statsVariable | string | Não | Variável para armazenar estatísticas |
Exemplo 1: Limpeza de Mensagem de Rede Social
Objetivo: Remover links promocionais de uma mensagem para análise de conteúdo textual puro
JSON para Importar
{
"name": "Limpar Mensagem Social",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "input_1",
"type": "input",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Receber Mensagem",
"parameters": {
"message": "Cole a mensagem de rede social:",
"variableName": "raw_message"
}
}
},
{
"id": "cleaner_1",
"type": "content_cleaner",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Limpar URLs",
"parameters": {
"inputVariable": "raw_message",
"removeUrls": true,
"removeEmojis": true,
"outputVariable": "clean_message",
"returnStats": true,
"statsVariable": "stats"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Mostrar Limpo",
"parameters": {
"message": "📝 TEXTO LIMPO:\n{{clean_message}}\n\n📊 ESTATÍSTICAS:\n• URLs removidas: {{stats.urlsRemoved}}\n• Emojis removidos: {{stats.emojisRemoved}}\n• Redução: {{stats.reductionPercentage}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "input_1" },
{ "source": "input_1", "target": "cleaner_1" },
{ "source": "cleaner_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Saída esperada:
Sistema: Cole a mensagem de rede social:
Usuário: Confira nossa promoção! 🎉 Acesse https://loja.com/promo e use o cupom SAVE20 em http://bit.ly/promo123
Sistema: 📝 TEXTO LIMPO:
Confira nossa promoção! Acesse e use o cupom SAVE20 em
📊 ESTATÍSTICAS:
• URLs removidas: 2
• Emojis removidos: 1
• Redução: 35%
Exemplo 2: Moderação de Spam com URLs
Objetivo: Detectar e limpar mensagens com excesso de links suspeitos
JSON para Importar
{
"name": "Moderação Anti-Spam",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "variable_1",
"type": "variable",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Simular Spam",
"parameters": {
"variableName": "suspicious_message",
"variableValue": "PROMOÇÃO IMPERDÍVEL! Acesse http://site1.com, http://site2.net e https://oferta.com AGORA!"
}
}
},
{
"id": "cleaner_1",
"type": "content_cleaner",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Remover URLs",
"parameters": {
"inputVariable": "suspicious_message",
"removeUrls": true,
"outputVariable": "cleaned_message",
"returnStats": true,
"statsVariable": "moderation_stats"
}
}
},
{
"id": "condition_1",
"type": "condition",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Verificar se é Spam",
"parameters": {
"condition": "{{moderation_stats.urlsRemoved}} > 2"
}
}
},
{
"id": "message_spam",
"type": "message",
"position": { "x": 900, "y": 50 },
"data": {
"label": "Alertar Spam",
"parameters": {
"message": "⚠️ SPAM DETECTADO!\n\nForam encontradas {{moderation_stats.urlsRemoved}} URLs suspeitas.\n\nMensagem bloqueada."
}
}
},
{
"id": "message_ok",
"type": "message",
"position": { "x": 900, "y": 150 },
"data": {
"label": "Mensagem OK",
"parameters": {
"message": "✅ Mensagem aprovada:\n{{cleaned_message}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1100, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "variable_1" },
{ "source": "variable_1", "target": "cleaner_1" },
{ "source": "cleaner_1", "target": "condition_1" },
{ "source": "condition_1", "target": "message_spam", "label": "true" },
{ "source": "condition_1", "target": "message_ok", "label": "false" },
{ "source": "message_spam", "target": "end_1" },
{ "source": "message_ok", "target": "end_1" }
]
}
Saída esperada:
Sistema: ⚠️ SPAM DETECTADO!
Foram encontradas 3 URLs suspeitas.
Mensagem bloqueada.
Exemplo 3: Preparação de Texto para Análise
Objetivo: Limpar artigo web removendo URLs antes de enviar para análise de sentimento
JSON para Importar
{
"name": "Preparar Texto para Análise",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "variable_1",
"type": "variable",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Artigo Web",
"parameters": {
"variableName": "article",
"variableValue": "Segundo estudo em https://pesquisa.com, a tecnologia avança rapidamente. Veja mais em http://www.tech.com/artigos. A inovação é fundamental."
}
}
},
{
"id": "cleaner_1",
"type": "content_cleaner",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Limpar para Análise",
"parameters": {
"inputVariable": "article",
"removeUrls": true,
"removeExtraSpaces": true,
"trimWhitespace": true,
"outputVariable": "clean_article"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Texto Preparado",
"parameters": {
"message": "📄 Texto preparado para análise:\n\n{{clean_article}}\n\n✅ Pronto para processamento!"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "variable_1" },
{ "source": "variable_1", "target": "cleaner_1" },
{ "source": "cleaner_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Saída esperada:
Sistema: 📄 Texto preparado para análise:
Segundo estudo em , a tecnologia avança rapidamente. Veja mais em . A inovação é fundamental.
✅ Pronto para processamento!
Resposta do Node
{
"success": true,
"data": {
"cleaned_content": "Texto sem URLs",
"stats": {
"originalLength": 150,
"cleanedLength": 120,
"reductionPercentage": "20.00%"
},
"cleaning_stats": {
"originalLength": 150,
"cleanedLength": 120,
"urlsRemoved": 3,
"emailsRemoved": 0,
"phonesRemoved": 0,
"emojisRemoved": 0,
"specialCharsRemoved": 0,
"numbersRemoved": 0,
"processingTime": 5
}
},
"executionTime": 5,
"logs": [
"Cleaned content using balanced mode",
"Original: 150 chars → Cleaned: 120 chars",
"Removed 3 URLs"
]
}
Boas Práticas
✅ SIM:
- Combinar remoção de URLs com outras limpezas (emails, números) para limpeza completa
- Sempre usar
returnStats: truequando precisar auditar quantas URLs foram removidas - Preservar o texto original em outra variável antes de limpar
- Usar em conjunto com validação de spam baseada em quantidade de URLs
❌ NÃO:
- Remover URLs se elas fazem parte essencial da informação (catálogos, referências)
- Esquecer de verificar se o conteúdo tinha URLs antes de processar downstream
- Aplicar em textos técnicos onde URLs são documentação necessária
Dicas
💡 Dica 1: Use returnStats e verifique urlsRemoved para detectar spam (muitas URLs = suspeito)
💡 Dica 2: Combine com removeExtraSpaces: true para evitar espaços duplos onde URLs foram removidas
💡 Dica 3: Para preservar contexto, considere substituir URLs por "[LINK]" usando customRegex ao invés de remover completamente
💡 Dica 4: O regex detecta HTTP e HTTPS automaticamente, incluindo URLs encurtadas (bit.ly, etc)
Próximo Node
→ REMOVE_EMAILS - Remove endereços de email do texto → REMOVE_PHONES - Remove números de telefone do texto → REMOVE_EMOJIS - Remove emojis e símbolos especiais