Ferramenta de deduplicação de texto
Remova rapidamente conteúdo duplicado do texto, suporta deduplicação por linha, palavra e frase
O que é deduplicação de texto?
Text Deduplicate remove linhas, palavras ou entradas repetidas de um texto para tornar listas mais limpas e fáceis de revisar. Ele é útil para trechos CSV importados, listas de palavras-chave, coleções de e-mails, fragmentos de log, códigos de produto, variantes de prompts e notas em que duplicados surgiram por copiar, mesclar ou exportar com erro. O ponto central é a regra de comparação: maiúsculas, espaços no início ou fim, linhas vazias, pontuação, normalização e ordem original podem decidir se duas entradas são iguais. A ferramenta acelera a limpeza, mas não substitui revisão de domínio quando diferenças pequenas têm significado.
Como Usar
Operações Básicas
- Insira ou cole o texto a desduplicar na caixa de texto à esquerda
- Selecione o modo de desduplicação adequado (por linha, palavra, frase, etc.)
- Ajuste as opções conforme necessário (sensibilidade a maiúsculas/minúsculas, manter ordem, etc.)
- Veja os resultados da desduplicação e as estatísticas em tempo real à direita
- Clique no botão de copiar para salvar os resultados na área de transferência
Descrição dos Modos
- Por Linha: trata cada linha como uma unidade independente e remove linhas idênticas
- Por Palavra: divide o texto por espaços e remove palavras duplicadas
- Por Frase: divide por pontos, interrogações e exclamações, removendo frases duplicadas
- Por Parágrafo: divide por linhas em branco e remove parágrafos duplicados
- Por Caractere: remove caracteres que aparecem várias vezes no texto
Casos de uso
Princípio técnico
A deduplicação é uma varredura de passagem única apoiada por um Set do JavaScript. O Set do ECMAScript usa o algoritmo de igualdade SameValueZero (a mesma comparação que Array.prototype.includes usa, onde NaN é igual a NaN mas +0 é igual a -0) e a especificação exige lookup médio sublinear — o V8 implementa como uma tabela hash de endereçamento aberto com inserção amortizada O(1), de modo que toda a passagem é O(n) no número de itens. A alternativa ingênua — inserir em um array resultado e chamar indexOf em cada elemento — é O(n²) e se torna lenta por volta de 10k entradas. A divisão é específica do modo: modo linha divide em /\r?\n/ para absorver tanto CRLF (Windows) quanto LF (Unix), modo palavra divide em /\s+/, modo frase divide em /(?<=[.!?])\s+/ e modo parágrafo divide em /\n{2,}/. Cada unidade passa por normalizadores opcionais antes de se tornar uma chave do Set: trim() para remover espaços em branco no início e no fim, toLowerCase() para correspondência insensível a maiúsculas e String.prototype.normalize('NFC') para que strings visualmente idênticas escritas com formas compostas (é, U+00E9) vs decompostas (e + U+0301) colapsem em uma única entrada. A ordem é preservada porque o array resultado é construído em ordem de iteração — o Set é consultado apenas como um filtro 'já vi isso?'. A mesma escolha de estrutura de dados está por trás de SQL DISTINCT e Python set(); a única alternativa real para dezenas de milhões de itens é um filtro de Bloom probabilístico, que troca uma pequena taxa de falso positivo (≈10% a 10 bits/elemento) por memória constante e é exagerado para uma ferramenta de texto no navegador.
- Lookup do Set usa o algoritmo SameValueZero (ECMA-262 §7.2.10) — NaN corresponde a NaN, +0 corresponde a -0, caso contrário igualdade estrita
- V8 implementa Set como tabela hash; insert e has são O(1) amortizados, tornando toda a deduplicação O(n) versus O(n²) baseado em indexOf
- Regex do modo linha /\r?\n/ trata CRLF, LF e CR final em uma única divisão; ignorar isso deixa sufixos '\r' invisíveis que impedem a correspondência exata
- Normalização Unicode via String.prototype.normalize('NFC') colapsa formas compostas/decompostas (ex. 'é' U+00E9 vs 'e' + U+0301) em uma única chave
- Modo insensível a maiúsculas converte a chave para minúsculas apenas — o valor em caixa original é preservado na saída, de modo que o primeiro 'ERROR' é mantido literalmente enquanto linhas 'error' posteriores são descartadas
- Preservação de ordem é gratuita: o array resultado é construído em ordem de entrada e o Set é consultado apenas como filtro, comportando-se como SQL DISTINCT com ordenação estável
- Para 10M+ itens onde a memória se torna o gargalo, um filtro de Bloom (≈10 bits/elemento para taxa de falso positivo de 1%) substitui o Set — desnecessário no navegador, onde um Set de 1M strings cabe confortavelmente em menos de 100 MB
Exemplos
Deduplicação de linhas, mantendo a primeira ocorrência
Entrada:
apple
banana
apple
orange
banana
Saída:
apple
banana
orangeDeduplicação de linhas com espaços removidos
Entrada:
hello
hello
hello
world
Saída (após trim):
hello
worldDeduplicação sem distinção de maiúsculas/minúsculas
Entrada:
ERROR
error
Warning
WARNING
warning
Saída (sem distinção de maiúsculas/minúsculas):
ERROR
WarningExtração de lista única de e-mails
Entrada:
alice@example.com
bob@example.com
ALICE@example.com
carol@example.com
bob@example.com
Saída (sem distinção de maiúsculas/minúsculas, modo de linha):
alice@example.com
bob@example.com
carol@example.comDeduplicação de palavras
Entrada: hello world hello again world
Saída: hello world againDeduplicação de frases
Entrada: This is a test. This is a test. Another sentence.
Saída: This is a test. Another sentence.Perguntas frequentes
O que é considerado duplicado?
Cada unidade (linha, palavra, frase, parágrafo ou caractere) é comparada com as outras. Unidades idênticas são duplicatas. Ative ou desative a sensibilidade a maiúsculas. A página produz a lista deduplicada e informa quantas duplicatas foram removidas.
Ele preserva a ordem?
Sim — a primeira ocorrência de cada item único é mantida em sua posição original e as duplicatas seguintes são descartadas. A saída preserva a ordem original.
Linhas em branco são tratadas como duplicatas?
Linhas em branco são comparadas como qualquer outra linha. A primeira linha em branco é mantida; linhas em branco idênticas posteriores são descartadas junto com outras duplicatas.
Posso deduplicar por uma substring ou coluna?
Não. A deduplicação funciona sobre o conteúdo completo de cada unidade (linha, palavra, frase, parágrafo ou caractere). Não há modo de deduplicação baseado em coluna ou substring.
Ele ordena a saída?
Não. A saída sempre preserva a ordem original. Não há opção de ordenação.
Que tamanho de arquivo ele suporta?
A memória do navegador é o limite. Centenas de milhares de linhas funcionam em navegadores desktop. Arquivos de milhões de linhas estouram a memória; para esses, use uma ferramenta de CLI como `sort -u` ou `awk '!seen[$0]++'`.
Meu texto é enviado para algum servidor?
Não. A deduplicação usa um Set em memória no seu navegador. As linhas coladas não são transmitidas.