В другой статье мы видели, что такое синонимы и как получить все синонимы любого слова. Как насчет поиска этих синонимов в разных документах? В этой статье вы узнаете, как искать синонимы любого конкретного запроса (слова) в нескольких файлах с помощью C#.

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

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

GroupDocs.Search предоставляет .NET API, который позволяет искать любое слово и его синонимы в нескольких файлах указанной папки. Я буду использовать этот API в показанных примерах этой статьи. Это позволяет вам искать по большому списку форматов документов. Помимо поиска синонимов, GroupDocs.Search для .NET также поддерживает некоторые дополнительные методы поиска, в том числе:

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

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

PM> Install-Package GroupDocs.Search

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

Шаги показывают, как искать синонимы (слова с похожим значением) в файлах в папке с помощью C#.

  • Определите поисковый запрос, индексную папку и папку документа.
  • Создайте индекс с определенной папкой индекса, используя класс Index.
  • Добавить папку документа в индекс.
  • Создайте SearchOptions и установите для UseSynonymSearch значение true.
  • Вызовите метод Search класса Index и передайте параметры запроса и поиска.
  • Чтобы распечатать сводку, используйте свойства извлеченного SearchResult.

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

// Поиск синонимов в нескольких файлах и папках с использованием C#
string query = "make";
string indexFolder = @"path\indexFolder";
string documentsFolder = @"path\documentsFolder";

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

// Создание объекта параметров поиска
SearchOptions options = new SearchOptions();
options.UseSynonymSearch = true; // Enabling Synonym Search

// Найдите слово «сделать»
// Помимо слова «сделать», также будут искаться синонимы «сделать, вызвать, получить,…».
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

Следующие шаги подробно распечатывают результаты после получения всех синонимов и их количества вхождений в каждом документе.

  • Просмотрите результаты поиска, полученные с помощью приведенного выше кода.
  • Получить каждый FoundDocument с помощью метода GetFoundDocument.
  • Печать соответствующих свойств каждого FoundDocument.
  • Перейдите FoundFields в каждом FoundDocument, чтобы получить Found Document Field.
  • Из каждого 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: **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

Поиск синонимов и печать результатов с использованием C# — полный код

Вот полный исходный код, который сначала находит все синонимы в соответствии с предоставленным запросом, а затем печатает все вхождения всех синонимов в каждом документе в этой папке с помощью C#.

// Поиск синонимов в нескольких файлах и папках и печать результатов с помощью С#
string query = "make";
string indexFolder = @"path\indexFolder";
string documentsFolder = @"path\documentsFolder";

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

// Создание объекта параметров поиска
SearchOptions options = new SearchOptions();
options.UseSynonymSearch = true; // Enabling synonym 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 для поиска любого слова и его синонимов в нескольких файлах.

Узнайте больше об .NET Search Automation API из документации. Чтобы ознакомиться с функциями, вы можете посмотреть примеры в репозитории GitHub. Свяжитесь с нами по любому вопросу через форум.

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