Herramienta de deduplicación de texto
Elimina rápidamente contenido duplicado del texto, admite deduplicación por línea, palabra y oración
¿Qué es la deduplicación de texto?
Text Deduplicate elimina líneas, palabras o entradas repetidas de un texto para que las listas queden más limpias y fáciles de revisar. Es útil con fragmentos CSV importados, listas de keywords, correos, logs, códigos de producto, variantes de prompts y notas donde los duplicados aparecieron por copiar, fusionar o exportar mal. Lo importante son las reglas de comparación: mayúsculas, espacios iniciales o finales, líneas vacías, puntuación, normalización y orden original pueden decidir si dos entradas son iguales. La herramienta acelera la limpieza, pero no sustituye revisión de dominio cuando entradas parecidas deben seguir separadas o pequeñas diferencias tienen significado.
Cómo usar
Operaciones básicas
- Introduce o pega el texto a deduplicar en el cuadro de texto izquierdo
- Selecciona el modo de deduplicación adecuado (por línea, palabra, oración, etc.)
- Ajusta las opciones según sea necesario (distinguir mayúsculas, mantener orden, etc.)
- Consulta los resultados de deduplicación y las estadísticas en tiempo real a la derecha
- Haz clic en el botón de copiar para guardar los resultados en el portapapeles
Descripción de modos
- Por línea: trata cada línea como una unidad independiente y elimina las líneas idénticas
- Por palabra: divide el texto por espacios y elimina las palabras duplicadas
- Por oración: divide por puntos, signos de interrogación y exclamación, y elimina las oraciones duplicadas
- Por párrafo: divide por líneas en blanco y elimina los párrafos duplicados
- Por carácter: elimina los caracteres que aparecen varias veces en el texto
Casos de uso
Principio técnico
La deduplicación es un recorrido en una sola pasada respaldado por un Set de JavaScript. El Set de ECMAScript usa el algoritmo de igualdad SameValueZero (la misma comparación que usa Array.prototype.includes, donde NaN es igual a NaN pero +0 es igual a -0) y la especificación exige que proporcione búsqueda promedio sublineal — V8 lo implementa como una tabla hash de direccionamiento abierto con inserción amortizada O(1), por lo que toda la pasada es O(n) en función del número de elementos. La alternativa ingenua — insertar en un array resultado y llamar a indexOf en cada elemento — es O(n²) y se vuelve problemática alrededor de 10k entradas. La división depende del modo: el modo línea divide con /\r?\n/ para absorber tanto los finales de línea CRLF (Windows) como LF (Unix), el modo palabra divide con /\s+/, el modo oración divide con /(?<=[.!?])\s+/, y el modo párrafo divide con /\n{2,}/. Cada unidad pasa por normalizadores opcionales antes de convertirse en clave del Set: trim() para eliminar espacios iniciales y finales, toLowerCase() para la comparación sin distinción de mayúsculas, y String.prototype.normalize('NFC') para que las cadenas visualmente idénticas escritas en forma compuesta (é, U+00E9) vs descompuesta (e + U+0301) colapsen en una sola entrada. El orden se conserva porque el array resultado se construye en orden de iteración — el Set se consulta solo como filtro de '¿ya lo he visto?'. La misma elección de estructura de datos subyace a SQL DISTINCT y Python set(); la única alternativa real para decenas de millones de elementos es un filtro probabilístico de Bloom, que intercambia una pequeña tasa de falsos positivos (≈1% a 10 bits/elemento) por memoria constante y es excesivo para una herramienta de texto en el navegador.
- La búsqueda en Set usa el algoritmo SameValueZero (ECMA-262 §7.2.10) — NaN coincide con NaN, +0 coincide con -0, en otro caso igualdad estricta
- V8 implementa Set como tabla hash; insert y has son O(1) amortizados, haciendo toda la deduplicación O(n) frente a O(n²) basado en indexOf
- El regex de modo línea /\r?\n/ maneja CRLF, LF y CR final en una sola división; ignorar esto deja sufijos '\r' invisibles que impiden la coincidencia exacta
- La normalización Unicode mediante String.prototype.normalize('NFC') colapsa las formas compuestas/descompuestas (p. ej. 'é' U+00E9 vs 'e' + U+0301) en una sola clave
- El modo sin distinción de mayúsculas convierte la clave a minúsculas — el valor en mayúsculas originales se conserva en la salida, de modo que el primer 'ERROR' se mantiene tal cual mientras las líneas 'error' posteriores se descartan
- La conservación del orden es gratuita: el array resultado se construye en orden de entrada y el Set se consulta solo como filtro, por lo que se comporta como SQL DISTINCT con ordenación estable
- Para más de 10 millones de elementos donde la memoria es el cuello de botella, un filtro de Bloom (≈10 bits/elemento para 1% de falsos positivos) reemplaza al Set — no es necesario en el navegador, donde un Set de 1 millón de cadenas cabe cómodamente en menos de 100 MB
Ejemplos
Deduplicación de líneas, conservando la primera aparición
Entrada:
apple
banana
apple
orange
banana
Salida:
apple
banana
orangeDeduplicación de líneas con espacios recortados
Entrada:
hello
hello
hello
world
Salida (después de recortar):
hello
worldDeduplicación sin distinguir mayúsculas y minúsculas
Entrada:
ERROR
error
Warning
WARNING
warning
Salida (sin distinguir mayúsculas):
ERROR
WarningExtracción de lista única de correos
Entrada:
alice@example.com
bob@example.com
ALICE@example.com
carol@example.com
bob@example.com
Salida (sin distinguir mayúsculas, modo línea):
alice@example.com
bob@example.com
carol@example.comDeduplicación de palabras
Entrada: hello world hello again world
Salida: hello world againDeduplicación de oraciones
Entrada: This is a test. This is a test. Another sentence.
Salida: This is a test. Another sentence.Preguntas frecuentes
¿Qué se considera un duplicado?
Cada unidad (línea, palabra, frase, párrafo o carácter) se compara con las demás. Las unidades idénticas son duplicados. Puedes activar o desactivar la sensibilidad a mayúsculas. La página devuelve la lista deduplicada e indica cuántos duplicados se han eliminado.
¿Conserva el orden?
Sí: la primera aparición de cada elemento único se mantiene en su posición original y los duplicados posteriores se descartan. La salida conserva el orden original.
¿Las líneas en blanco se tratan como duplicados?
Las líneas en blanco se comparan como cualquier otra línea. La primera línea en blanco se conserva; las líneas en blanco idénticas posteriores se descartan junto con el resto de duplicados.
¿Puede deduplicar por una subcadena o columna?
No. La deduplicación funciona sobre el contenido completo de cada unidad (línea, palabra, frase, párrafo o carácter). No hay un modo basado en columnas o subcadenas.
¿Ordenará la salida?
No. La salida siempre conserva el orden original. No hay opción de ordenar.
¿Qué tamaño de archivo aguanta?
El límite es la memoria del navegador. Cientos de miles de líneas funcionan bien en navegadores de escritorio. Archivos de varios millones de líneas se quedan sin memoria; para esos casos usa una herramienta de CLI como `sort -u` o `awk '!seen[$0]++'`.
¿Se sube mi texto?
No. La deduplicación usa un Set en memoria dentro de tu navegador. Las líneas pegadas no se transmiten.