В іншій статті ми побачили, що таке синоніми та як отримати всі синоніми будь-якого слова. Як щодо пошуку цих синонімів у різних документах? У цій статті ви дізнаєтесь, як шукати синоніми будь-якого конкретного запиту (слова) у кількох файлах за допомогою C#.

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

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

GroupDocs.Search надає .NET API, який дозволяє шукати будь-яке слово та його синоніми в кількох файлах зазначеної папки. Я буду використовувати цей API у показаних прикладах цієї статті. Це дозволяє пошук у великому списку форматів документів. Окрім пошуку синонімів, GroupDocs.Search for .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

// Шукайте слово "make"
// Окрім слова «зробити», також шукатимуть синоніми «зробити, спричинити, отримати, ...».
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#.

// Пошук синонімів у кількох файлах і папках і друк результатів за допомогою 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

// Шукайте слово "make"
// Окрім слова «зробити», також шукатимуть слова «зробити, спричинити, отримати, ...».
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. Зв’яжіться з нами за будь-яким запитом через форум.

Дивись також