Búsqueda difusa usando C# .NET
  • No sabes qué color o qué color se escribe en el documento.
  • Buscando “John”, pero podría haberse escrito como “Jon” o tal vez “Jhon”.
  • Localizar “EE.UU.” cuando el usuario ingresa “EE.UU”.
  • La palabra o frase que estás buscando podría tener un “error”, ups, nuevamente es un “error”.

Aquí viene la Búsqueda Difusa. La búsqueda difusa le permite encontrar coincidencias aproximadas en lugar de coincidencias exactas en los datos, lo que permite flexibilidad en las consultas de búsqueda. Esto es particularmente útil en escenarios con errores tipográficos, ortográficos o variaciones en los datos. Este artículo muestra cómo realizar mediante programación una búsqueda difusa en varios documentos en carpetas usando C#.

Biblioteca de búsqueda difusa de C#

Para la búsqueda difusa, utilizaremos la API GroupDocs.Search for .NET. Esto permite un cierto grado de tolerancia en la ortografía, lo que la hace eficaz para adaptarse a variaciones lingüísticas regionales como las que existen entre el inglés británico y americano.

Esta biblioteca nos permite buscar texto mediante programación en una amplia gama de formatos de archivo, como documentos de Word (DOC, DOCX), hojas de cálculo (XLS, XLSX), presentaciones (PPT, PPTX), archivos PDF, marcado (HTML, XML), Markdown (MD), libros electrónicos (EPUB, CHM, FB2), mensajes de correo electrónico (MSG, EML), documentos OneNote y archivos ZIP.

Para conocer todos los tipos de archivos con los que puede trabajar, consulte la documentación.

Puede optar por obtener las DLL o el instalador MSI desde la sección de descargas o agregar la API a su programa .NET usando NuGet.

Hagamos una búsqueda difusa en archivos usando C#

Siga estos pasos para realizar una búsqueda difusa en varios archivos de varios formatos dentro de carpetas usando C#:

  • Cree un Índice proporcionando una ruta de carpeta.
  • Agregue la ruta de la carpeta principal para el directorio de búsqueda al índice creado.
  • Defina la consulta de búsqueda.
  • Active la Búsqueda Difusa habilitando la opción.
  • Establezca el nivel de similitud en el algoritmo difuso según sea necesario.
  • Ejecute la búsqueda utilizando el método de búsqueda para obtener los resultados de la búsqueda.
  • Ahora, puede iterar en SearchResults para crear o imprimir el resultado como desee.

La búsqueda difusa en el código C# que se menciona a continuación encuentra las coincidencias aproximadas de la consulta dada en todos los archivos en todas las subcarpetas con un 20% de tolerancia a errores ortográficos.

// Búsqueda difusa de varios archivos en varias carpetas usando C#

// Crear una carpeta de índice y agregarle la carpeta del documento
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);

Aquí, el nivel de similitud se establece en 0,8, es decir, un 80 % de coincidencia, lo que corresponde a un 20 % de tolerancia a errores. Puede ajustar el nivel de tolerancia modificando el nivel de similitud en el código.

A continuación se muestran los resultados de búsqueda difusa que puede obtener del código anterior. Es bastante simple, sin embargo, el código de impresión también está disponible más adelante en este artículo.

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

Imprimir resultados de búsqueda

El siguiente código C# proporciona dos formas de presentar los resultados de su búsqueda.

  • Resalte todas las coincidencias aproximadas.
  • Imprima los resultados en un formato legible y analizable.
// Resalte e imprima los resultados de la búsqueda para todos los 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);
        // Impresión de términos 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("===========================================");
}

Obtener una licencia gratuita o una prueba gratuita

Licencia gratuita

Obtenga una licencia temporal de forma gratuita para explorar esta biblioteca sin restricciones.

Prueba gratis

Puedes descargar la prueba gratuita desde la sección de descargas.

API .NET para buscar dentro de archivos y carpetas

Conclusión

En este artículo, analizamos el enfoque programático de C# para la magia de la búsqueda difusa para encontrar todas las palabras coincidentes aproximadas pero con un cierto grado de tolerancia a errores. Esta característica hace que la búsqueda difusa sea efectiva para acomodar variaciones de idiomas regionales como aquellas entre el inglés británico y americano, errores tipográficos en el texto, variaciones de nombres y coincidencias fonéticas.

Para obtener detalles completos sobre la API, se recomienda a los lectores que consulten la documentación.

Cualquier consulta o discusión adicional puede dirigirse al foro.


Ver también