Pesquisa difusa usando C# .NET
  • Você não sabe qual cor ou grafia de cores foi usada no documento.
  • Procurando por “John“, mas poderia ter sido escrito como “Jon” ou talvez “Jhon“.
  • Localizando “EUA” quando o usuário insere “EUA“.
  • A palavra ou frase que você procura pode ter um “mistaek”, opa, é novamente um “erro”.

Aí vem a Pesquisa Fuzzy. A pesquisa difusa permite encontrar correspondências aproximadas em vez de correspondências exatas nos dados, permitindo flexibilidade nas consultas de pesquisa. Isso é particularmente útil em cenários com erros de digitação, ortografia ou variações nos dados. Este artigo mostra como executar programaticamente uma pesquisa difusa em vários documentos em pastas usando C#.

Biblioteca de pesquisa difusa C#

Para o Fuzzy Search, utilizaremos a API GroupDocs.Search for .NET. Isso permite um certo grau de tolerância ortográfica, tornando-o eficaz para acomodar variações linguísticas regionais, como aquelas entre o inglês britânico e o inglês americano.

Esta biblioteca nos permite pesquisar texto programaticamente em uma ampla variedade de formatos de arquivo, como documentos Word (DOC, DOCX), planilhas (XLS, XLSX), apresentações (PPT, PPTX), arquivos PDF, marcação (HTML, XML), Markdown (MD), e-books (EPUB, CHM, FB2), mensagens de e-mail (MSG, EML), documentos do OneNote e arquivos ZIP.

Para descobrir todos os tipos de arquivos com os quais você pode trabalhar, confira a documentação.

Você pode optar por obter as DLLs ou o instalador MSI na seção de download ou adicionar a API ao seu programa .NET usando NuGet.

Vamos fazer uma pesquisa difusa em arquivos usando C#

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

  • Crie um Índice fornecendo um caminho de pasta.
  • Adicione o caminho da pasta pai do diretório de pesquisa ao índice criado.
  • Defina a consulta de pesquisa.
  • Ative o Fuzzy Search habilitando a opção.
  • Defina o nível de similaridade no algoritmo difuso conforme necessário.
  • Execute a pesquisa usando o método Search para obter os resultados da pesquisa.
  • Agora, você pode iterar em SearchResults para criar ou imprimir a saída como desejar.

A pesquisa difusa no código C# mencionado abaixo encontra as correspondências aproximadas da consulta fornecida em todos os arquivos em todas as subpastas com 20% de tolerância a erros ortográficos.

// Fuzzy Pesquise vários arquivos em várias pastas usando C#

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

SearchOptions options = new SearchOptions();
options.FuzzySearch.Enabled = true; // Enabling the fuzzy search
options.FuzzySearch.FuzzyAlgorithm = new SimilarityLevel(0.8);

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

Aqui, o nível de similaridade é definido como 0,8, ou seja, 80% de correspondência, o que corresponde a 20% de tolerância ao erro. Você pode ajustar o nível de tolerância ajustando o nível de similaridade no código.

Abaixo estão os resultados da pesquisa difusa que você pode obter no código acima. É bastante simples, porém o código de impressão também está disponível posteriormente neste 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 C# 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 C#
for (int i = 0; i < result.DocumentCount; i++)
{
    FoundDocument document = result.GetFoundDocument(i);

    OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, indexFolder + "/Highlight" + i + ".html");
    Highlighter highlighter = new DocumentHighlighter(outputAdapter); 
    index.Highlight(document, highlighter);

    Console.WriteLine("\tDocument: " + document.DocumentInfo.FilePath);
    Console.WriteLine("\tOccurrences: " + document.OccurrenceCount);
    for (int j = 0; j < document.FoundFields.Length; j++)
    {
        FoundDocumentField field = document.FoundFields[j];
        Console.WriteLine("\t\tField: " + field.FieldName);
        Console.WriteLine("\t\tOccurrences: " + document.OccurrenceCount);
        // Imprimindo termos encontrados
        if (field.Terms != null)
        {
            for (int k = 0; k < field.Terms.Length; k++)
            {
                Console.WriteLine("\t\t\t" + field.Terms[k].PadRight(20) + field.TermsOccurrences[k]);
            }
        }
    }
    Console.WriteLine("===========================================");
}

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 .NET para pesquisa em arquivos e pastas

Conclusão

Neste artigo, examinamos a abordagem programática C# para a magia da pesquisa Fuzzy para encontrar todas as palavras correspondentes aproximadas, mas com um certo grau de tolerância a erros. Esse recurso torna a pesquisa difusa eficaz para acomodar variações regionais de idioma, como aquelas entre o inglês britânico e americano, erros de digitação no texto, variações de nomes e correspondência fonética.

Para obter detalhes abrangentes sobre a API, os leitores são aconselhados a consultar a documentação.

Qualquer dúvida ou discussão adicional pode ser direcionada para o fórum.


Veja também