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

После этого вы можете применять различные методы поиска для поиска текста в текстовых документах, электронных таблицах, презентациях, файлах HTML, электронных книгах PDF, сообщениях электронной почты, ZIP-архивах и многих других файлах.

Один из примеров реализации полнотекстового поиска — в текстовых процессорах и текстовых редакторах. Это поможет вам найти фразу или слово в любом месте документа.

Полнотекстовый поиск

Ниже рассматриваются следующие темы:

.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 для .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. По вопросам обращайтесь к нам через форум.

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