En otro artículo, hemos visto qué son los sinónimos y cómo obtener todos los sinónimos de cualquier palabra. ¿Qué hay de encontrar estos sinónimos dentro de diferentes documentos? Este artículo lo guiará sobre cómo buscar los sinónimos de cualquier consulta específica (palabra) en varios archivos usando C#.

A continuación se tratarán los siguientes temas:

API .NET para buscar sinónimos en varios archivos

GroupDocs.Search proporciona la API .NET que permite buscar cualquier palabra y sus sinónimos en varios archivos de la carpeta especificada. Usaré esta API en los ejemplos que se muestran en este artículo. Le permite buscar en una gran lista de formatos de documentos. Además de encontrar los sinónimos, GroupDocs.Search for .NET también admite algunas técnicas de búsqueda más que incluyen:

  • Búsqueda borrosa
  • Búsqueda sensible a mayúsculas y minúsculas
  • Búsqueda homófona
  • Búsqueda de expresiones regulares
  • Búsqueda de comodines

Puede descargar el instalador DLL o MSI desde la sección de descargas o instalar la API en su aplicación .NET a través de NuGet.

PM> Install-Package GroupDocs.Search

Encuentra sinónimos en múltiples archivos usando C#

Los pasos muestran cómo buscar sinónimos (palabras con significados similares) en archivos dentro de una carpeta usando C#.

  • Definir la consulta de búsqueda, la carpeta de índice y la carpeta del documento.
  • Crear un índice con una carpeta de índice definida utilizando la clase Índice.
  • Agregar la carpeta del documento al índice.
  • Cree las Opciones de búsqueda y establezca UseSynonymSearch en verdadero.
  • Llame al método Buscar de la clase Index y pase las opciones de consulta y búsqueda.
  • Para imprimir el resumen, use las propiedades del Resultado de búsqueda recuperado.

El código fuente muestra cómo encontrar todos los sinónimos dentro de todos los archivos de una carpeta usando C#

// Busque sinónimos en múltiples archivos y carpetas usando C#
string query = "make";
string indexFolder = @"path\indexFolder";
string documentsFolder = @"path\documentsFolder";

// Crear un índice en la carpeta especificada
Index index = new Index(indexFolder);
index.Add(documentsFolder);

// Creación de un objeto de opciones de búsqueda
SearchOptions options = new SearchOptions();
options.UseSynonymSearch = true; // Enabling Synonym Search

// Buscar la palabra 'hacer'
// Además de la palabra 'hacer', también se buscarán los sinónimos "hacer, causar, conseguir,..."
SearchResult result = index.Search(query, options);
Console.WriteLine("Query: " + query);
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Occurrences: " + result.OccurrenceCount);
Query: **make**
Documents: 2
Occurrences: 22

Los siguientes pasos imprimen los resultados en detalle después de obtener todos los sinónimos y su número de ocurrencias en cada documento.

  • Recorra los resultados de búsqueda que se recuperan usando el código anterior.
  • Obtener cada DocumentoEncontrado utilizando el método ObtenerDocumentoEncontrado.
  • Imprimir las propiedades respectivas de cada FoundDocument.
  • Recorra los FoundFields dentro de cada FoundDocument para obtener Found Document Field.
  • De cada FoundDocumentField, puede obtener sus términos y el recuento de ocurrencias dentro de cada documento.

El siguiente código fuente imprime los resultados de la búsqueda de sinónimos junto con el número de ocurrencias de cada término buscado usando C#.

// Imprimir los resultados de la búsqueda de sinónimos en C#
Console.WriteLine("Query: " + query);
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Total occurrences: " + result.OccurrenceCount + "\n");
for (int i = 0; i < result.DocumentCount; i++)
{
    FoundDocument document = result.GetFoundDocument(i);
    Console.WriteLine("Document: " + document.DocumentInfo.FilePath);
    Console.WriteLine("Occurrences: " + document.OccurrenceCount);
    for (int j = 0; j < document.FoundFields.Length; j++)
    {
        FoundDocumentField field = document.FoundFields[j];
        Console.WriteLine("\tField: " + field.FieldName);
        Console.WriteLine("\tOccurrences: " + document.OccurrenceCount);
        // Imprimir términos encontrados
        if (field.Terms != null)
        {
            for (int k = 0; k < field.Terms.Length; k++)
            {
                Console.WriteLine("\t\t" + field.Terms[k].PadRight(20) + field.TermsOccurrences[k]);
            }
        }
    }
}
Query: **make**
Documents: 2
Total occurrences: 22

Document: C:/documents/sample.docx
Occurrences: 6
    Field: content
    Occurrences: 6
        make             1
        get                 2
        cause            1
        do                  2
Document: C:/documents/sample.txt
Occurrences: 16
    Field: content
    Occurrences: 16
        get                  4
        cause             1
        do                  11

Buscar sinónimos e imprimir resultados usando C# - Código completo

Aquí está el código fuente completo que primero encuentra todos los sinónimos de acuerdo con la consulta proporcionada y luego imprime todas las apariciones de todos los sinónimos en cada documento dentro de esa carpeta usando C#.

// Busque sinónimos en múltiples archivos y carpetas e imprima los resultados usando C#
string query = "make";
string indexFolder = @"path\indexFolder";
string documentsFolder = @"path\documentsFolder";

// Crear un índice en la carpeta especificada
Index index = new Index(indexFolder);
// Indexación de documentos de la carpeta especificada
index.Add(documentsFolder);

// Creación de un objeto de opciones de búsqueda
SearchOptions options = new SearchOptions();
options.UseSynonymSearch = true; // Enabling synonym search

// Buscar la palabra 'hacer'
// Además de la palabra 'make', también se buscarán las palabras "do, cause, get, ..."
SearchResult result = index.Search(query, options);

// Imprimiendo el resultado
Console.WriteLine("Query: " + query);
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Total occurrences: " + result.OccurrenceCount + "\n");
for (int i = 0; i < result.DocumentCount; i++)
{
    FoundDocument document = result.GetFoundDocument(i);
    Console.WriteLine("Document: " + document.DocumentInfo.FilePath);
    Console.WriteLine("Occurrences: " + document.OccurrenceCount);
    for (int j = 0; j < document.FoundFields.Length; j++)
    {
        FoundDocumentField field = document.FoundFields[j];
        Console.WriteLine("\tField: " + field.FieldName);
        Console.WriteLine("\tOccurrences: " + document.OccurrenceCount);
        // Imprimir términos encontrados
        if (field.Terms != null)
        {
            for (int k = 0; k < field.Terms.Length; k++)
            {
                Console.WriteLine("\t\t" + field.Terms[k].PadRight(20) + field.TermsOccurrences[k]);
            }
        }
    }
}

Conclusión

Para concluir, ha aprendido cómo encontrar palabras específicas y también sus sinónimos en varios documentos dentro de la carpeta especificada usando C#. Puede intentar desarrollar su propia aplicación .NET para buscar cualquier palabra y sus sinónimos en varios archivos.

Obtenga más información sobre la API de automatización de búsqueda de .NET en la documentación. Para experimentar las funciones, puede echar un vistazo a los ejemplos en el repositorio GitHub. Comuníquese con nosotros para cualquier consulta a través del foro.

Ver también