Слова, які звучать однаково, але відрізняються значенням або написанням, є омофонами. Тоді як слова, які пишуться однаково, але відрізняються за значенням або вимовою, є омографами. Омоніми можуть бути омофонами або омографами; або обидва. Не будемо плутати і автоматизувати це. У цій статті ви дізнаєтесь, як шукати омофони в кількох документах за допомогою C#.

Шукайте омофони у файлах за допомогою GroupDocs

Нижче будуть розглянуті такі теми:

.NET API для пошуку омофонов у кількох файлах

GroupDocs.Search демонструє .NET API (GroupDocs.Search for .NET) що дозволяє шукати слова та їхні омофони в кількох файлах вказаної папки. Ми будемо використовувати цей API у прикладах цієї статті. Він може шукати вміст у різних форматах. Окрім пошуку омофонів, API підтримує багато інших способів пошуку відповідно до вимог. Деякі з підтримуваних методів пошуку:

  • Пошук синонімів
  • Пошук по фразі
  • Нечіткий пошук
  • Пошук з урахуванням регістру
  • Пошук за регулярними виразами
  • Пошук по дикій картці

Ви можете завантажити DLL або інсталятор MSI із розділу завантажень або встановити API у своїй програмі .NET через NuGet. /packages/groupdocs.search).

PM> Install-Package GroupDocs.Search

Знайти омофони в кількох файлах за допомогою C#

Наступні кроки вказують, як ми можемо шукати омофони (слова зі схожим звучанням/вимовою) у файлах у папці за допомогою C#.

  • Визначте пошуковий запит, папку індексування та папку, яка містить ваші файли.
  • Створіть Індекс із визначеною папкою індексу.
  • Додайте папку документа до створеного покажчика.
  • Визначте SearchOptions і встановіть [UseHomophoneSearch](https://apireference.groupdocs.com/search/net/groupdocs .search.options/searchoptions/properties/usehomophonesearch) на true.
  • Виконайте пошук у всіх омофонах, викликавши метод Search із параметрами запиту та пошуку.
  • Використовуйте зведення, використовуючи властивості отриманого SearchResult.

Наступний вихідний код C# знаходить усі омофони в усіх файлах визначеної папки. Крім того, ви можете керувати своїм омофонним словником.

// Пошук омофонов у кількох файлах і папках за допомогою C#
string query = "right";
string indexFolder = @"path\indexFolder";
string documentsFolder = @"path\documentsFolder";

// Створення індексу у вказаній папці
Index index = new Index(indexFolder);
index.Add(documentsFolder);

// Створення об’єкта параметрів пошуку
SearchOptions options = new SearchOptions()
{
    UseHomophoneSearch = true // Enabling Homophone Search
}; 

// Шукайте слово "право"
// Окрім слова «правий», також шукатимуть слова «обряд, райт, писати, ...».
SearchResult result = index.Search(query, options);
Console.WriteLine("Query: " + query);
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Occurrences: " + result.OccurrenceCount);

Результат наведеного вище коду такий:

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

Виконайте наведені нижче дії після отримання всіх омофонів і їх кількості входжень у кожному документі, щоб представити результати пошуку омофонів.

  • Перегляньте результати пошуку омофонів, отримані раніше.
  • Отримайте кожен документ як FoundDocument за допомогою [GetFoundDocument()](https://apireference.groupdocs.com/search/ net/groupdocs.search.results/searchresult/methods/getfounddocument).
  • За потреби використовуйте властивості кожного FoundDocument.
  • Тепер перегляньте FoundFields FoundDocument, щоб отримати [FoundDocumentField](https://apireference.groupdocs. com/search/net/groupdocs.search.results/founddocumentfield).
  • Нарешті, з кожного FoundDocumentField отримайте його умови та їх випадки в кожному документі.

Наведений нижче вихідний код C# друкує результати пошуку омофонів разом із кількістю входжень кожного шуканого терміна.

// Друк результатів пошуку омофонів на 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);
        // Друк знайдених термінів
        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: **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

Пошук омофонів і друк результатів за допомогою C# - повний код

Наступний код на C# підсумовує описані вище кроки, він спочатку знаходить усі омофони відповідно до запиту, а потім друкує всі входження всіх омофонов у кожному документі в наданій папці.

// Шукайте омофони в кількох файлах і папках, а потім роздрукуйте результати за допомогою C#
string query = "right";
string indexFolder = @"path\indexFolder";
string documentsFolder = @"path\documentsFolder";

// Створення індексу у вказаній папці
Index index = new Index(indexFolder);
// Індексація документів із зазначеної папки
index.Add(documentsFolder);

// Створення об’єкта параметрів пошуку
SearchOptions options = new SearchOptions()
{
    UseHomophoneSearch = true // Enabling Homophone Search
}; 

// Шукайте слово "право"
// Окрім слова «правий», також шукатимуть слова «обряд, райт, писати, ...».
SearchResult result = index.Search(query, options);

// Друк результату
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);
        // Друк знайдених термінів
        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]);
            }
        }
    }
}

Висновок

Підсумовуючи, ви навчилися знаходити слова та їхні омофони в кількох документах зазначеної папки за допомогою C#. Ви можете спробувати створити власну програму .NET для пошуку омофонів у кількох файлах за допомогою GroupDocs.Search for .NET.

Дізнайтеся більше про .NET Search Automation API з документації. Щоб випробувати функції, ви можете переглянути доступні приклади в репозиторії GitHub. Зв’яжіться з нами за будь-яким запитом через форум.

Дивись також