Palavras que soam iguais, mas têm significados ou grafias diferentes são Homofones. Considerando que as palavras que têm a mesma grafia, mas diferem em significado ou pronúncia são Homógrafos. Homônimos podem ser homófonos ou homógrafos; ou ambos. Não vamos confundir e automatizar. Neste artigo, você aprenderá como pesquisar homófonos em vários documentos usando C#.

Pesquisar homófonos em arquivos usando GroupDocs

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

API .NET para pesquisar homófonos em vários arquivos

GroupDocs.Search apresenta a API .NET (GroupDocs.Search for .NET) que permite pesquisar palavras e seus homófonos dentro de vários arquivos da pasta especificada. Usaremos essa API nos exemplos deste artigo. Ele pode pesquisar o conteúdo de vários formatos diferentes. Além de encontrar os homófonos, a API oferece suporte a muitas outras maneiras de pesquisar conforme o requisito. Algumas das técnicas de pesquisa suportadas são as seguintes:

  • Pesquisa de sinônimos
  • Pesquisa de frase
  • Pesquisa difusa
  • Pesquisa sensível a maiúsculas e minúsculas
  • Pesquisa de expressões regulares
  • Pesquisa de curingas

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

PM> Install-Package GroupDocs.Search

Encontre homófonos em vários arquivos usando C

As etapas a seguir orientam como podemos pesquisar homófonos (palavras com som/pronúncia semelhantes) em arquivos dentro de uma pasta usando C#.

O código-fonte C# a seguir encontra todos os homófonos em todos os arquivos de uma pasta definida. Além disso, você pode gerenciar seu dicionário homófono.

// Pesquise homófonos em vários arquivos e pastas usando C #
string query = "right";
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()
{
    UseHomophoneSearch = true // Enabling Homophone Search
}; 

// Procure a palavra 'certo'
// Além da palavra 'right', as palavras "rite, wright, write, ..." também serão pesquisadas
SearchResult result = index.Search(query, options);
Console.WriteLine("Query: " + query);
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Occurrences: " + result.OccurrenceCount);

A saída do código acima é a seguinte:

Query: **right**
Documents: 2
Occurrences: 17

Siga as etapas abaixo mencionadas após obter todos os homófonos e seu número de ocorrências em cada documento para apresentar os resultados da pesquisa de homófonos.

  • Percorra os resultados da pesquisa homófona que são recuperados anteriormente.
  • Obtenha cada documento como FoundDocument usando o GetFoundDocument().
  • Use as propriedades de cada FoundDocument conforme necessário.
  • Agora, percorra os FoundFields do FoundDocument para obter FoundDocumentField.
  • Por fim, de cada FoundDocumentField, obtenha seus Termos e suas ocorrências dentro de cada documento.

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

// Imprimindo os resultados da pesquisa homófona 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]);
            }
        }
    }
}

A seguir está a saída do exemplo de código acima.

Query: **right**
Documents: 2
Total occurrences: 17

Document: C:/documents/sample.docx
Occurrences: 11
    Field: content
    Occurrences: 11
        right             3
        rite               4
        wright           1
        write             3
Document: C:/documents/sample.txt
Occurrences: 6
    Field: content
    Occurrences: 6
        right             4
        write             2

Pesquisar homófonos e resultados de impressão usando C# - código completo

O código C# a seguir resume as etapas acima, primeiro encontra todos os homófonos de acordo com a consulta e, em seguida, imprime todas as ocorrências de todos os homófonos em cada documento dentro da pasta fornecida.

// Pesquise homófonos em vários arquivos e pastas e imprima os resultados usando C #
string query = "right";
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()
{
    UseHomophoneSearch = true // Enabling Homophone Search
}; 

// Procure a palavra 'certo'
// Além da palavra 'right', as palavras "rite, wright, write, ..." 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 resumir, você aprendeu a encontrar as palavras e seus homófonos nos vários documentos da pasta especificada usando C#. Você pode tentar construir seu próprio aplicativo .NET para pesquisar homófonos em vários arquivos usando GroupDocs.Search for .NET.

Saiba mais sobre a API .NET Search Automation na documentação. Para experimentar os recursos, você pode dar uma olhada nos exemplos disponíveis no repositório GitHub. Entre em contato conosco para qualquer consulta por meio do fórum.

Veja também