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

C# API для сканирования текста в файлах и папках

Теперь мы будем использовать API GroupDocs.Search for .NET для исследования многочисленных текстов в файлах различных форматов в папках. Эта библиотека позволяет нам систематически сканировать текст в широком диапазоне форматов файлов, таких как документы Word, электронные таблицы, презентации, файлы PDF, файлы разметки, электронные книги, сообщения электронной почты, документы One Note и ZIP-архивы. Подробный список поддерживаемых форматов файлов можно найти в полной документации.

У вас есть возможность либо загрузить библиотеки DLL или установщик MSI из раздела загрузок, либо установить API в свое .NET-приложение с помощью NuGet.

PM> Install-Package GroupDocs.Search

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

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

  • Создайте объект Index с указанным путем к индексной папке.
  • Индексируйте папку родительского документа, используя метод Add.
  • Определите поисковый запрос с несколькими терминами или фразами.
  • Выполните сканирование текста с помощью метода Search и сохраните результаты.
  • Просмотрите результаты поиска:
    • Получите каждый найденный документ с помощью метода GetFoundDocument.
    • Получите или распечатайте любую информацию о найденном документе.
    • Настройте OutputAdapter для желаемого формата и пути.
    • Создайте для документа Выделитель.
    • Выделите и выведите результаты поиска в HTML-файл, используя метод Highlight.
// Текстовый поиск в нескольких файлах различных форматов в нескольких папках с использованием C#

// Создание индекса и индексирование документов из указанной папки
Index index = new Index("path/for/indexingFolder");
index.Add("path/parent-folder/");

// Поиск документов, содержащих слова «вода» или «не» или фразу «Lorem ipsum».
string query = "water OR \"Lorem ipsum\" OR non";
SearchResult result = index.Search(query);

// Печать результата
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Total occurrences: " + result.OccurrenceCount);
for (int i = 0; i < result.DocumentCount; i++)
{
    FoundDocument document = result.GetFoundDocument(i);

    // Выделите результаты поиска
    OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, "/path/Highlighted-" + i + ".html");
    Highlighter highlighter = new DocumentHighlighter(outputAdapter);
    index.Highlight(document, highlighter); // Generating HTML formatted text with highlighted occurrences
}

Приведенный выше код позволяет вам искать определенные тексты в нескольких файлах и создавать выделенные выходные файлы HTML для каждого найденного документа.

Результаты поиска выделенного текста в формате HTML

Печать результатов текстового поиска

Из результата поискового запроса можно дополнительно извлечь информацию о найденных документах.

// Печать результата
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Total occurrences: " + result.OccurrenceCount);
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]);
            }
        }
        // Печать найденных фраз
        if (field.TermSequences != null)
        {
            for (int k = 0; k < field.TermSequences.Length; k++)
            {
                string sequence = string.Join(" ", field.TermSequences[k]);
                Console.WriteLine("\t\t" + sequence.PadRight(30) + field.TermSequencesOccurrences[k]);
            }
        }
    }
}

Следующее будет результатом печати приведенных выше результатов поиска, полученных из файлов DOCX, PDF и TXT:

Documents: 3
Total occurrences: 141
	Document: Lorem ipsum.docx
	Occurrences: 101
		Field: filename
		Occurrences: 101
			lorem ipsum		1
		Field: content
		Occurrences: 101
			non			94
			lorem ipsum		6
	Document: Lorem ipsum.pdf
	Occurrences: 1
		Field: filename
		Occurrences: 1
			lorem ipsum		1
	Document: English.txt
	Occurrences: 39
		Field: content
		Occurrences: 39
			water			39

Полный код

Вот полный код C#, который выполняет коллективный поиск текстовых строк и фраз в нескольких файлах и папках:

// Текстовый поиск в нескольких файлах различных форматов в нескольких папках с использованием C#

// Создание индекса и индексирование документов из указанной папки
Index index = new Index("path/for/indexingFolder");
index.Add("path/parent-folder/");

// Поиск документов, содержащих слова «вода» или «не» или фразу «Lorem ipsum».
string query = "water OR \"Lorem ipsum\" OR non";
SearchResult result = index.Search(query);

// Печать результата
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Total occurrences: " + result.OccurrenceCount);
for (int i = 0; i < result.DocumentCount; i++)
{
    FoundDocument document = result.GetFoundDocument(i);

    // Выделите результаты поиска
    OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, "/path/Highlighted-" + i + ".html");
    Highlighter highlighter = new DocumentHighlighter(outputAdapter);
    index.Highlight(document, highlighter); // Generating HTML formatted text with highlighted occurrences

    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]);
            }
        }
        // Печать найденных фраз
        if (field.TermSequences != null)
        {
            for (int k = 0; k < field.TermSequences.Length; k++)
            {
                string sequence = string.Join(" ", field.TermSequences[k]);
                Console.WriteLine("\t\t" + sequence.PadRight(30) + field.TermSequencesOccurrences[k]);
            }
        }
    }
}

Получение бесплатной лицензии или бесплатной пробной версии

Бесплатная лицензия

Получите временную лицензию бесплатно для неограниченного использования этой библиотеки.

Бесплатная пробная версия

Вы можете загрузить бесплатную пробную версию из раздела загрузок.

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

Заключение

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

Для получения подробной информации об API читателям рекомендуется обратиться к документации.

Любые вопросы или дополнительные обсуждения можно направлять на доступный форум.

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