Прежде чем мы углубимся в детали, давайте рассмотрим технику полнотекстового поиска. Полнотекстовый поиск — это, по сути, более продвинутый способ поиска текста/запроса в наборе документов. Этот подход быстро находит все экземпляры термина и работает с использованием текстовых индексов. В этой статье мы узнаем, как программно выполнять полнотекстовый поиск в документах с помощью C#.
После этого вы можете применять различные методы поиска для поиска текста в текстовых документах, электронных таблицах, презентациях, файлах HTML, электронных книгах PDF, сообщениях электронной почты, ZIP-архивах и многих других файлах.
Один из примеров реализации полнотекстового поиска — в текстовых процессорах и текстовых редакторах. Это поможет вам найти фразу или слово в любом месте документа.
Ниже рассматриваются следующие темы:
- API .NET для полнотекстового поиска
- Полнотекстовый поиск
- Выполнить поиск в C#
- Выделить результаты поиска
.NET API для текстового поиска
GroupDocs.Search for .NET — это внутренний поисковый API, который обеспечивает полнотекстовый поиск и может быть интегрирован в любое приложение .NET без какой-либо зависимости от стороннего инструмента или программного обеспечения. Он позволяет вам искать во множестве форматов документов в ваших приложениях.
Вы можете загрузить DLL или MSI установщик из раздела загрузок или установить API в свое приложение .NET через NuGet.
PM> Install-Package GroupDocs.Search
Полнотекстовый поиск с использованием C#
Есть два основных шага для выполнения или реализации полнотекстового поиска.
- Индексация
- Выполнить поиск
Индексация
Чтобы сделать возможным мгновенный поиск среди тысяч документов с одинаковыми или разными форматами файлов, вам необходимо создать индекс и добавить в него эти документы.
Что такое индекс?
Индекс содержит отсканированные тексты всех документов. Поэтому, когда вы собираетесь выполнять операцию поиска (искать по конкретному запросу), ссылаются только на индекс, а не на текст исходных документов.
Создание индекса
Индекс может быть создан в памяти или на диске. Индекс, созданный в памяти, не может быть сохранен после выхода из вашей программы. Напротив, индекс, созданный на диске, может быть загружен в будущем для продолжения работы. В следующем примере показано, как создать индекс на диске.
Index index = new Index("indexPath/FolderName/");
Когда документы проиндексированы, индекс готов к обработке поисковых запросов. Ниже приведены некоторые методы поиска, которые можно выполнять с помощью GroupDocs.Search for .NET.
- Поиск с учетом регистра
- Поиск по регулярным выражениям
- Поиск по фразе
- Многогранный поиск
- Поиск синонимов
- Поиск по шаблону
Выполнить поиск в C#
Начиная с варианта использования. Если у нас есть несколько документов (Word, PDF, Excel и HTML), и мы хотим выполнить по ним определенный поисковый запрос (поисковое слово «видео»).
Ниже приведены шаги для выполнения текстового поиска по нескольким документам в папке:
- Определите папку исходных документов и индексную папку.
- Подготовьте строку запроса.
- Создайте Index, используя индексную папку.
- Добавить папку исходных документов в индекс.
- Выполните поиск с помощью метода Search класса Index.
- Обход и результаты поиска для свойств каждого документа.
Следующий исходный код выполняет текстовый поиск с помощью C# по всем документам в предоставленной папке.
// Текст запроса поиска во всех документах указанной папки в С#
string indexFolder = @"indexPath/GroupDocs/index/";
string documentsFolder = @"documentPath/GroupDocs/source/";
string query = "video";
// Создание индекса в указанной папке и добавление папки документов в индекс
Index index = new Index(indexFolder);
index.Add(documentsFolder);
// Поиск в индексе
SearchResult result = index.Search(query);
Console.WriteLine("Documents found: " + result.DocumentCount);
// Просмотрите каждый документ в результатах поиска
foreach (FoundDocument document in result)
{
Console.WriteLine("Document Path : " + document.DocumentInfo.FilePath);
Console.WriteLine("Occurance : " + document.OccurrenceCount);
}
Мы получим путь к документу и количество вхождений поискового запроса во всех документах, доступных в папке документов. Вот скриншот для наглядности.
Выделение результатов текстового поиска в C#
Давайте теперь выполним тот же текстовый поиск, но на этот раз мы выделим все вхождения, соответствующие запросу.
Следующие шаги показывают, как выделить результаты текстового поиска:
- Подготовьте строку запроса.
- Создайте Index, используя путь к папке index.
- Добавить папку исходных документов в индекс.
- Найдите папку с документами, используя метод Поиск.
- Просматривая результаты поиска, создайте Подсветку.
- Используйте метод Highlight класса Index, чтобы выделить результаты поиска.
Следующий код создает выходные данные HTML с выделенными результатами поиска с помощью C#.
string indexFolder = @"indexPath/GroupDocs/index/";
string documentFolder = @"documentPath/GroupDocs/source/";
string query = "draw";
// Создайте индекс в указанной папке и добавьте папку документов в индекс
Index index = new Index(indexFolder);
index.Add(documentFolder);
// Поиск слова запроса
SearchResult result = index.Search(query);
// Выделить все вхождения в тексте
for (int i = 0; i < result.DocumentCount; i++)
{
FoundDocument document = result.GetFoundDocument(i);
string path = indexFolder + "Highlighted-"+ i +".html";
OutputAdapter outputAdapter = new FileOutputAdapter(path);
Highlighter highlighter = new HtmlHighlighter(outputAdapter);
index.Highlight(document, highlighter);
}
На выходе мы получим несколько файлов HTML. В каждом файле будет отображаться содержимое отдельного документа (например, excel.xlsx, source.docx, target.docx) с выделенным поисковым термином/словом. Ниже приведен выделенный HTML-вывод файла DOCX.
Получите бесплатную лицензию API
Вы можете получить бесплатную временную лицензию, чтобы использовать API без ограничений пробной версии.
Вывод
В этой статье мы научились искать текст в нескольких документах папки с помощью C#. Далее мы обсудили, как программно выделить текст результатов поиска в формате HTML.
Вы можете узнать больше об API, используя документацию. Многие другие примеры доступны на GitHub. По вопросам обращайтесь к нам через форум.