Pular para conteúdo

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:

  1. Limpeza de Conteúdo: Remover links de textos copiados da web ou redes sociais
  2. Proteção de Privacidade: Eliminar URLs que possam conter informações sensíveis ou tracking
  3. Análise de Texto Puro: Preparar conteúdo para análise sem influência de links externos
  4. 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:

  1. Recebe o texto: Obtém o conteúdo da variável especificada em inputVariable
  2. Aplica regex de URLs: Utiliza expressão regular para identificar padrões de URLs completas
  3. Conta ocorrências: Registra quantas URLs foram encontradas para estatísticas
  4. Remove as URLs: Substitui todas as URLs encontradas por string vazia
  5. Atualiza estatísticas: Incrementa o contador urlsRemoved nas estatísticas
  6. 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

  1. Processamento de Mensagens de Spam: "Remover links suspeitos de mensagens antes de análise"
  2. Extração de Conteúdo de Artigos: "Limpar URLs de texto copiado da web para análise pura"
  3. Preparação para Análise de Sentimento: "Remover links que não agregam valor à análise emocional"
  4. 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: true quando 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