В другой статье мы видели, что такое синонимы и как получить все синонимы любого слова. Как насчет поиска этих синонимов в разных документах? В этой статье вы узнаете, как искать синонимы любого конкретного запроса (слова) в нескольких файлах с помощью C#.
Ниже будут рассмотрены следующие темы:
- API .NET — поиск синонимов
- Найти синонимы в документах с помощью C#
- Представить результаты поиска синонимов с помощью 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
// Найдите слово «сделать»
// Помимо слова «сделать», также будут искаться синонимы «сделать, вызвать, получить,…».
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
Печать результатов поиска синонимов с использованием C#
Следующие шаги подробно распечатывают результаты после получения всех синонимов и их количества вхождений в каждом документе.
- Просмотрите результаты поиска, полученные с помощью приведенного выше кода.
- Получить каждый 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. Свяжитесь с нами по любому вопросу через форум.