Слова, которые звучат одинаково, но различаются по значению или написанию, называются омофонами. Принимая во внимание, что слова, которые пишутся одинаково, но различаются по значению или произношению, являются омографами. Омонимы могут быть омофонами или омографами; или оба. Давайте не будем путать и автоматизировать это. В этой статье вы узнаете, как искать омофоны в нескольких документах с помощью C#.

Поиск омофонов в файлах с помощью GroupDocs

Ниже будут рассмотрены следующие темы:

.NET API для поиска омофонов в нескольких файлах

GroupDocs.Search демонстрирует .NET API (GroupDocs.Search for .NET) что позволяет искать слова и их омофоны в нескольких файлах указанной папки. Мы будем использовать этот API в примерах этой статьи. Он может искать содержимое различных форматов. Наряду с поиском омофонов API поддерживает множество других способов поиска в соответствии с требованиями. Вот некоторые из поддерживаемых методов поиска:

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

Вы можете загрузить DLL или MSI установщик из раздела загрузок или установить API в своем приложении .NET через NuGet.

PM> Install-Package GroupDocs.Search

Найдите омофоны в нескольких файлах с помощью C#

Следующие шаги показывают, как мы можем искать омофоны (слова с похожим звуком/произношением) в файлах в папке с помощью C#.

  • Определите поисковый запрос, папку индексации и папку, содержащую ваши файлы.
  • Создайте Индекс с определенной папкой индекса.
  • Добавить папку документа в созданный индекс.
  • Определите SearchOptions и установите UseHomophoneSearch на true.
  • Найдите все омофоны, вызвав метод Поиск с параметрами запроса и поиска.
  • Используйте сводку, используя свойства извлеченного 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().
  • Используйте свойства каждого FoundDocument по мере необходимости.
  • Теперь просмотрите FoundFields FoundDocument, чтобы получить 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. Свяжитесь с нами по любому вопросу через форум.

Смотрите также