Em outro artigo, vimos o que são sinônimos e como obter todos os sinônimos de qualquer palavra. Que tal encontrar esses sinônimos em diferentes documentos? Este artigo irá orientá-lo sobre como pesquisar os sinônimos de qualquer consulta específica (palavra) em vários arquivos usando C#.

Os seguintes tópicos serão abordados a seguir:

API .NET para pesquisar sinônimos em vários arquivos

GroupDocs.Search fornece a API .NET que permite pesquisar qualquer palavra e seus sinônimos em vários arquivos da pasta especificada. Estarei usando esta API nos exemplos mostrados neste artigo. Ele permite que você pesquise em uma grande lista de formatos de documentos. Além de encontrar os sinônimos, o GroupDocs.Search for .NET também oferece suporte a mais algumas técnicas de pesquisa que incluem:

  • Pesquisa difusa
  • Pesquisa sensível a maiúsculas e minúsculas
  • Pesquisa homófona
  • Pesquisa de expressões regulares
  • Pesquisa de curingas

Você pode baixar o instalador DLLs ou MSI da seção de downloads ou instalar a API em seu aplicativo .NET via NuGet.

PM> Install-Package GroupDocs.Search

Encontre sinônimos em vários arquivos usando C#

As etapas mostram como pesquisar sinônimos (palavras com significados semelhantes) em arquivos dentro de uma pasta usando C#.

  • Defina a consulta de pesquisa, a pasta de índice e a pasta do documento.
  • Crie um índice com a pasta de índice definida usando a classe Index.
  • Adicione a pasta do documento ao índice.
  • Crie o SearchOptions e defina o UseSynonymSearch como true.
  • Chame o método Search da classe Index e passe as opções de consulta e pesquisa.
  • Para imprimir o resumo, use as propriedades do SearchResult recuperado.

O código-fonte mostra como encontrar todos os sinônimos em todos os arquivos de uma pasta usando C#

// Pesquise sinônimos em vários arquivos e pastas usando C#
string query = "make";
string indexFolder = @"path\indexFolder";
string documentsFolder = @"path\documentsFolder";

// Criando um índice na pasta especificada
Index index = new Index(indexFolder);
index.Add(documentsFolder);

// Criando um objeto de opções de pesquisa
SearchOptions options = new SearchOptions();
options.UseSynonymSearch = true; // Enabling Synonym Search

// Procure a palavra 'fazer'
// Além da palavra 'make', também serão pesquisados os sinônimos "do, cause, get, ..."
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

As etapas a seguir imprimem os resultados em detalhes após obter todos os sinônimos e seu número de ocorrências em cada documento.

  • Percorra os resultados da pesquisa que são recuperados usando o código acima.
  • Obtenha cada FoundDocument usando o método GetFoundDocument.
  • Imprima as respectivas propriedades de cada FoundDocument.
  • Percorra os FoundFields dentro de cada FoundDocument para obter Found Document Field.
  • De cada FoundDocumentField, você pode obter seus termos e sua contagem de ocorrências dentro de cada documento.

O código-fonte a seguir imprime os resultados da pesquisa de sinônimos junto com o número de ocorrências de cada termo pesquisado usando C#.

// Imprimindo os resultados da pesquisa de sinônimos em 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);
        // Imprimindo termos 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

Pesquisar sinônimos e resultados de impressão usando C# - código completo

Aqui está o código-fonte completo que primeiro encontra todos os sinônimos de acordo com a consulta fornecida e, em seguida, imprime todas as ocorrências de todos os sinônimos em cada documento dentro dessa pasta usando C#.

// Pesquise sinônimos em vários arquivos e pastas e imprima os resultados usando C #
string query = "make";
string indexFolder = @"path\indexFolder";
string documentsFolder = @"path\documentsFolder";

// Criando um índice na pasta especificada
Index index = new Index(indexFolder);
// Indexando documentos da pasta especificada
index.Add(documentsFolder);

// Criando um objeto de opções de pesquisa
SearchOptions options = new SearchOptions();
options.UseSynonymSearch = true; // Enabling synonym search

// Procure a palavra 'fazer'
// Além da palavra 'make', as palavras "do, cause, get, ..." também serão pesquisadas
SearchResult result = index.Search(query, options);

// Imprimindo o 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);
        // Imprimindo termos 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]);
            }
        }
    }
}

Conclusão

Para concluir, você aprendeu como encontrar as palavras específicas e também seus sinônimos em vários documentos dentro da pasta especificada usando C#. Você pode tentar desenvolver seu próprio aplicativo .NET para pesquisar qualquer palavra e seus sinônimos em vários arquivos.

Saiba mais sobre a API .NET Search Automation na documentação. Para experimentar os recursos, você pode dar uma olhada em exemplos no repositório GitHub. Contacte-nos para qualquer questão através do fórum.

Veja também