Localizador de Duplicatas

Outras línguas: EnglishEspañolFrançaisDeutsch日本語한국어Русский中文

O localizador de duplicatas é uma aplicação de código aberto para detectar texto similar em um ou mais arquivos. Pode ser usado para encontrar duplicatas 100% assim como conteúdo que é semelhante, mas não idêntico. A ferramenta é compatível com vários formatos, incluindo texto simples, Markdown e XML.

A ferramenta de localização de duplicatas pode ajudar você com:

Exemplo de conteúdo duplicado

Aqui está um exemplo rápido para te dar uma ideia do que a ferramenta detecta:

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.

Como usar

  1. Baixe o aplicativo. Alternativamente, você pode construir você mesmo a partir de as fontes. Execute ./gradlew fatJar com o JDK 21 no diretório do código-fonte. O JAR estará em build/libs/duplicate-finder.jar .
  2. Certifique-se de que o Java 21 ou uma versão posterior esteja instalado no seu computador
  3. No terminal, abra a pasta com o arquivo .jar que você baixou
  4. Execute java -jar duplicate-finder.jar com os seguintes parâmetros:

    Parâmetro Significado Exemplo
    -r / --root Caminho relativo ou absoluto para a pasta onde você deseja procurar conteúdo duplicado. Padrão: o diretório de trabalho atual. -r=./my-project/
    -o / --output Caminho relativo ou absoluto para a pasta onde você deseja salvar os resultados da análise. Padrão: ./duplicate_finder_output, relativo ao diretório de trabalho atual. -o=./my-project/duplicates/
    -f / --fileMask

    Arquivos: Liste as extensões de arquivo a analisar, separadas por vírgulas e sem o ponto inicial. Use * para incluir todas as extensões.

    Parser: Cada entrada pode ser apenas uma extensão ou extension:parser. O parser determina como um arquivo é dividido em trechos de texto para comparação. Se omitido, ele é escolhido pela extensão; extensões desconhecidas usam file.

    Padrões: A lista padrão de extensões é .md, .mdx, .xml, .adoc, .asciidoc e .properties. Especificar -f substitui essa lista.

    Nomes dos parsers (após os dois-pontos) e os trechos de texto que produzem:

    • md – um elemento markdown
    • line – uma única linha de texto
    • xml – um elemento XML
    • adoc – elemento AsciiDoc
    • file – o conteúdo do arquivo inteiro
    • properties – o valor de uma propriedade

    -f=md,mdx
    Analisar apenas arquivos .md e .mdx, usando o parser de Markdown para ambos.

    -f=topic:xml,txt:line
    Analisar arquivos .topic como elementos XML e arquivos .txt linha por linha.

    -f="*:line"
    Analisar todos os arquivos, tratando cada linha como um trecho de texto separado.

    -l / --minLength O comprimento mínimo (em caracteres) para um fragmento de texto a ser analisado. Padrão: 100 (fragmentos de texto com menos de 100 caracteres são ignorados) -l=150
    -s / --minSimilarity O grau mínimo de semelhança entre dois fragmentos de texto para serem considerados duplicados. Padrão: 0.9 (90%) -s=0.85
    -d / --minDuplicates O número mínimo de duplicados para que um grupo de duplicados seja relatado. Padrão: 1 (um duplicado é suficiente) -d=5
    -ui / --ui Se deve usar a interface interativa ou não. Opções:
    • none – sem interface, apenas grava em arquivos
    • swing – interface antiga
    • compose – nova interface, padrão
    -ui=none
    -v / --verbose Mostrar os tempos de indexação e análise no console. Desativado por padrão. Os erros dos arquivos ignorados são exibidos independentemente desta opção. -v
    -g / --gram comprimento do ngrama (avançado) – afeta a velocidade, o uso de memória, e a precisão da análise. A diferença depende das especificidades do conteúdo. -g=10
    -w / --keepWhitespace Mantém as ocorrências de múltiplos espaços consecutivos no conteúdo analisado. Por padrão, os espaços em branco são normalizados, o que significa que vários espaços consecutivos são tratados e exibidos como um só. -w
    -i / --inline

    Incluir o conteúdo dos elementos aninhados no elemento que os envolve. Por exemplo:

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

    Com esta opção ativada, o elemento externo será analisado como 'Some content including nested content', enquanto por padrão, ele é analisado como 'Some content including </>'.

    -i

Arquivo de configuração

Você pode salvar as configurações em duplicate-finder.properties na pasta de conteúdo (-r ou o diretório atual). Use os nomes longos das opções sem -- como chaves. Por exemplo:

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

Execute sem argumentos para carregar o arquivo do diretório atual ou use -r para selecionar outra pasta de conteúdo. As configurações ausentes usam os valores padrão. As opções -o, -ui e -v podem substituir os ajustes salvos. Passar -s, -l, -d, -f, -g, -w ou -i ignora completamente o arquivo de configuração.

Exemplo de comando

Aqui está um exemplo de como seu comando pode parecer:

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

O comando acima fará o seguinte:

Resultados

Dependendo das configurações e do tamanho do projeto, pode ser necessário esperar um pouco para que a análise seja concluída. Depois disso, os resultados serão abertos no visualizador de duplicatas e salvos na pasta definida com a opção de linha de comando '-o'. Por padrão, os relatórios de texto são salvos em ./duplicate_finder_output no diretório de trabalho. Use -ui=none para salvar os relatórios sem abrir o visualizador.

Aqui está o que você vê no visualizador de duplicatas:

Duplicate finder UI
  1. Barra de ferramentas: configure o tamanho da fonte, a ordem de classificação e se deseja ver apenas um único fragmento de referência (2) para cada um dos grupos de duplicatas. Use Fuzzy search para inserir uma consulta de texto e encontrar trechos semelhantes com um limite de similaridade ajustável.
  2. Lista de fragmentos de referência: selecione o fragmento que servirá como referência para comparação.
  3. Lista de fragmentos duplicados: depois de selecionar o fragmento de referência (2), esta lista mostrará os fragmentos que são semelhantes a ele. Para visualizar um duplicado, selecione-o na lista.
  4. Pré-visualização do fragmento de referência: depois de selecionar o fragmento de referência (2), você pode visualizar seu conteúdo aqui. As partes comuns são mostradas em verde, enquanto as diferentes são mostradas em vermelho. Quanto mais fragmentos duplicados (3) tiverem essa parte em comum, mais verde aparecerá.
  5. Pré-visualização do fragmento duplicado: depois de selecionar o fragmento duplicado, sua pré-visualização aparecerá aqui. Você pode usá-la para uma comparação rápida com o fragmento de referência selecionado (4).

Saiba mais e entre em contato

Se você está interessado no desenvolvimento desta ferramenta, confira a série de postagens no blog relacionada:

Para feedback, você pode entrar em contato usando os contatos no rodapé desta página. Ficarei feliz em ouvir seus pensamentos e pedidos de recursos.

Licença

O código está licenciado sob a licença MIT, o que significa que você é livre para usá-lo para qualquer propósito, assim como bifurcá-lo e modificá-lo.

all posts ->