Pesquisa difusa usando Java

A pesquisa difusa ajuda a encontrar conteúdo semelhante, não exatamente igual, em seus dados. É muito útil quando há pequenos erros de digitação, erros ortográficos ou variações nos dados. Este artigo é sobre a maneira Java de realizar pesquisas difusas para localizar arquivos espalhados por pastas.

Aqui estão alguns exemplos para elaborar o conteúdo do exemplo de pesquisa difusa:

  • Você pode não ter certeza se o documento usa a grafia “cor” ou “cor”.
  • Ao procurar por “John”, ele pode ser escrito como “Jon” ou talvez “Jhon”.
  • Tentando encontrar “EUA” mesmo que alguém digite “EUA”
  • Se você cometer um “erro”, espere, na verdade é um “erro”.

A solução para encontrar esse tipo de conteúdo é o Fuzzy Search.

Biblioteca de pesquisa difusa Java

Para fazer pesquisas difusas em Java, usaremos a API GroupDocs.Search for Java. A API é altamente capaz de mostrar flexibilidade e fornecer um grau personalizável de tolerância a erros. Esse recurso é favorável ao lidar com variações de idioma, como inglês britânico e americano, e erros de digitação.

Com esta biblioteca, a pesquisa difusa pode ser realizada em uma grande variedade de formatos de arquivo. O suporte não se limita apenas a documentos Word (DOC, DOCX), planilhas (XLS, XLSX), apresentações (PPT, PPTX), PDFs, linguagens de marcação (HTML, XML), Markdown (MD), eBooks (EPUB, CHM, FB2), e-mails (MSG, EML), notas do OneNote e até arquivos ZIP.

Se você quiser saber todos os tipos de arquivos que essa mágica pode suportar, basta dar uma olhada na documentação.

Para começar, você pode obter a API na seção de download ou apenas adicionar o repositório mais recente e configurações de dependência do Maven diretamente em seus aplicativos Java.

Vamos fazer uma pesquisa difusa em arquivos usando Java

Siga estas etapas para realizar uma pesquisa difusa em vários arquivos de vários formatos de arquivo em pastas usando Java:

  1. Comece criando um Índice usando a pasta onde estão seus arquivos.
  2. Adicione o caminho da pasta principal ao índice.
  3. Forneça a consulta de pesquisa que você deseja pesquisar.
  4. Ative a magia do Fuzzy Search para que ele entenda pequenos erros.
  5. Defina o nível de similaridade no algoritmo difuso.
  6. Execute a pesquisa usando o método de pesquisa para obter os resultados da pesquisa.
  7. Agora, você pode percorrer SearchResults para criar ou imprimir a saída como desejar.

No código Java abaixo, o programa procura conteúdo semelhante ao que você solicitou em todos os arquivos e subpastas. É tolerante com erros ortográficos, até 25% de erro. Se você der uma olhada no código, verá que o nível de similaridade está definido como 0,75, o que equivale a 75% de correspondência. Se quiser ajustar a pesquisa, basta alterar o nível de similaridade no código.

// Fuzzy Pesquise vários arquivos em várias pastas usando Java

// Criando uma pasta de índice e adicionando a pasta do documento a ela
Index index = new Index("path/indexing-folder-path");
index.add("path/parent-folder");

SearchOptions options = new SearchOptions();
options.getFuzzySearch().setEnabled(true); // Enabling the fuzzy search
options.getFuzzySearch().setFuzzyAlgorithm(new SimilarityLevel(0.75));

String query = "nulla"; // search approximate matches of the provided query  
SearchResult result = index.search(query, options);

Depois de executar o código, você obterá uma lista de resultados de pesquisa difuso obtidos. Se você quiser saber como imprimir os resultados da pesquisa, continue lendo este artigo.

Query: nulla
 Documents: 2
 Occurrences: 135

     Document: Lorem ipsum.docx
     Occurrences: 132
         Field: content
         Occurrences: 132
             nulla               98
             nullam              34

     Document: EnglishText.txt
     Occurrences: 3
         Field: content
         Occurrences: 3
             dull                1
             full                1
             fully               1

Imprimindo resultados de pesquisa

O código Java a seguir fornece duas maneiras de apresentar os resultados da pesquisa.

  • Destaque todas as correspondências aproximadas.
  • Imprima os resultados em um formato legível e analisável
// Destaque e imprima os resultados da pesquisa para todos os documentos usando Java
for (int i = 0 ; i < result.getDocumentCount(); i++)
{
    FoundDocument document = result.getFoundDocument(i);
  
    OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, "path/Highlight" + i + ".html");
    Highlighter highlighter = new DocumentHighlighter(outputAdapter);
    index.highlight(document, highlighter);
 
    System.out.println("\tDocument: " + document.getDocumentInfo().getFilePath());
    System.out.println("\tOccurrences: " + document.getOccurrenceCount());
    for (FoundDocumentField field : document.getFoundFields()) {
        System.out.println("\t\tField: " + field.getFieldName());
        System.out.println("\t\tOccurrences: " + field.getOccurrenceCount());

        // Imprimindo termos encontrados
        if (field.getTerms() != null) {
            for (int k = 0; k < field.getTerms().length; k++) {
                System.out.println("\t\t\t" + field.getTerms()[k] + " - " + field.getTermsOccurrences()[k]);
            }
        }
    }
}

Obtendo uma licença gratuita ou uma avaliação gratuita

Licença gratuita

Obtenha uma licença temporária gratuitamente para explorar esta biblioteca sem restrições.

Teste grátis

Você pode baixar a versão de avaliação gratuita na seção de downloads.

API Java para pesquisa em arquivos e pastas

Conclusão

Neste artigo, exploramos a maneira programática Java de realizar pesquisa Fuzzy. Ajuda a encontrar palavras aproximadas que sejam semelhantes, mesmo que haja pequenos erros. Este recurso é útil para lidar com diferenças entre o inglês britânico e americano, erros de digitação, mudanças de nome e sons semelhantes em palavras.

Para mais informações sobre a API, confira a documentação.

Se você tiver dúvidas ou quiser discutir mais, acesse o fórum.


Veja também