Buscador de Duplicados

Otros idiomas: EnglishFrançaisDeutsch日本語한국어PortuguêsРусский中文

El buscador de duplicados es una aplicación de código abierto para detectar texto similar en uno o más archivos. Puede usarse para encontrar duplicados al 100% así como contenido que es similar pero no idéntico. La herramienta es compatible con varios formatos, incluidos texto plano, Markdown y XML.

La herramienta de búsqueda de duplicados puede ayudarte con:

Ejemplo de contenido duplicado

Aquí tienes un ejemplo rápido para darte una idea de lo que detecta la herramienta:

Chunk 1:
Open the Google Play Store on your Android device, search for "AwesomeApp", then tap "Install" to download and install the app.
Chunk 2:
Open the App Store on your iOS device, search for "AwesomeApp", then tap "Get" to download and install the app.

Cómo usar

  1. Descarga la aplicación. Alternativamente, puedes construirlo tú mismo desde las fuentes. Ejecuta ./gradlew fatJar con JDK 21 en el directorio del código fuente. El JAR estará en build/libs/duplicate-finder.jar .
  2. Asegúrate de que Java 21 o una versión posterior esté instalado en tu computadora
  3. En la terminal, abre la carpeta con el archivo .jar que descargaste
  4. Ejecuta java -jar duplicate-finder.jar con los siguientes parámetros:

    Parámetro Significado Ejemplo
    -r / --root Ruta relativa o absoluta a la carpeta donde desea buscar contenido duplicado. Por defecto: el directorio de trabajo actual. -r=./my-project/
    -o / --output Ruta relativa o absoluta a la carpeta donde desea guardar los resultados del análisis. Por defecto: ./duplicate_finder_output, relativo al directorio de trabajo actual. -o=./my-project/duplicates/
    -f / --fileMask

    Archivos: Indica las extensiones de archivo que se van a analizar, separadas por comas y sin el punto inicial. Usa * para incluir todas las extensiones.

    Analizador: Cada entrada puede ser una extensión sola o extension:parser. El analizador determina cómo se divide un archivo en fragmentos de texto para compararlos. Si se omite, se elige según la extensión; las extensiones desconocidas usan file.

    Valores predeterminados: La lista predeterminada de extensiones es .md, .mdx, .xml, .adoc, .asciidoc y .properties. Al especificar -f, se reemplaza esta lista.

    Nombres de analizadores (después de los dos puntos) y los fragmentos de texto que producen:

    • md – un elemento de markdown
    • line – una sola línea de texto
    • xml – un elemento XML
    • adoc – elemento AsciiDoc
    • file – el contenido completo del archivo
    • properties – el valor de una propiedad

    -f=md,mdx
    Analizar solo archivos .md y .mdx, usando el analizador de Markdown para ambos.

    -f=topic:xml,txt:line
    Analizar los archivos .topic como elementos XML y los archivos .txt línea por línea.

    -f="*:line"
    Analizar todos los archivos, tratando cada línea como un fragmento de texto independiente.

    -l / --minLength La longitud mínima (en caracteres) de un fragmento de texto para ser analizado. Por defecto: 100 (los fragmentos de texto más cortos que 100 caracteres se ignoran) -l=150
    -s / --minSimilarity El grado mínimo de similitud entre dos fragmentos de texto para ser considerados duplicados. Predeterminado: 0.9 (90%) -s=0.85
    -d / --minDuplicates El número mínimo de duplicados para que se informe un grupo de duplicados. Predeterminado: 1 (un duplicado es suficiente) -d=5
    -ui / --ui Si usar la interfaz de usuario interactiva o no. Opciones:
    • none – sin interfaz, solo escribir en archivos
    • swing – interfaz antigua
    • compose – nueva interfaz, predeterminada
    -ui=none
    -v / --verbose Mostrar los tiempos de indexación y análisis en la consola. Desactivado por defecto. Los errores de los archivos omitidos se muestran independientemente de esta opción. -v
    -g / --gram longitud de ngrama (avanzada) – afecta la velocidad, el uso de memoria, y la precisión del análisis. La diferencia depende de las especificidades del contenido. -g=10
    -w / --keepWhitespace Mantén las ocurrencias de múltiples espacios consecutivos en el contenido analizado. Por defecto, los espacios en blanco se normalizan, lo que significa que varios espacios consecutivos se tratan y se muestran como uno solo. -w
    -i / --inline

    Incluir el contenido de los elementos anidados en su elemento contenedor. Por ejemplo:

    <parent>Some content including <child>nested content</child></parent>

    Con esta opción activada, el elemento externo se analizará como 'Some content including nested content', mientras que por defecto se analiza como 'Some content including </>'.

    -i

Archivo de configuración

Puedes guardar los ajustes en duplicate-finder.properties en la carpeta de contenido (-r o el directorio actual). Usa los nombres largos de las opciones sin -- como claves. Por ejemplo:

fileMask=topic:xml,md,mdx
minSimilarity=0.85
minLength=200
ui=none

Ejecuta sin argumentos para cargar el archivo del directorio actual, o usa -r para seleccionar otra carpeta de contenido. Los ajustes no indicados usan sus valores predeterminados. Las opciones -o, -ui y -v pueden modificar los ajustes guardados. Si se pasa -s, -l, -d, -f, -g, -w o -i, se ignora por completo el archivo de configuración.

Ejemplo de comando

Aquí tienes un ejemplo de cómo podría ser tu comando:

java -jar duplicate-finder.jar -r=/Users/me.user/my-site -f=md,mdx -s=0.85 -d=5 -l=200

El comando anterior hará lo siguiente:

Resultados

Según la configuración y el tamaño del proyecto, es posible que tengas que esperar un poco a que se complete el análisis. Después de eso, los resultados se abrirán en el visor de duplicados y se guardarán en la carpeta definida con la opción de línea de comandos '-o'. Por defecto, los informes de texto se guardan en ./duplicate_finder_output dentro del directorio de trabajo. Usa -ui=none para guardar los informes sin abrir el visor.

Estos son los pasos que verá en el visor de duplicados:

Duplicate finder UI
  1. Barra de herramientas: configure el tamaño de fuente, el orden de clasificación y si desea ver solo un fragmento de referencia (2) para cada uno de los grupos de duplicados. Usa Fuzzy search para introducir una consulta de texto y encontrar pasajes similares con un umbral de similitud ajustable.
  2. Lista de fragmentos de referencia: seleccione el fragmento que servirá como referencia para la comparación.
  3. Lista de fragmentos duplicados: después de seleccionar el fragmento de referencia (2), esta lista mostrará los fragmentos que son similares a él. Para previsualizar un duplicado, selecciónelo de la lista.
  4. Vista previa del fragmento de referencia: una vez que haya seleccionado el fragmento de referencia (2), puede previsualizar su contenido aquí. Las partes comunes se muestran en verde, mientras que las diferentes se muestran en rojo. Cuantos más fragmentos duplicados (3) tengan esta parte en común, más verde se verá.
  5. Vista previa del fragmento duplicado: después de seleccionar el fragmento duplicado, su vista previa aparecerá aquí. Puede usarlo para una comparación rápida con el fragmento de referencia seleccionado (4).

Más información y contacto

Si está interesado en el desarrollo de esta herramienta, consulte la serie de blogs relacionada:

Para comentarios, puede comunicarse utilizando los contactos en el pie de página de esta página. Estaré encantado de escuchar sus opiniones y solicitudes de funciones.

Licencia

El código está licenciado bajo la licencia MIT, lo que significa que eres libre de usarlo para cualquier propósito, así como de bifurcarlo y modificarlo.

all posts ->