Чи замислювалися ви коли-небудь про те, як легко здійснювати пошук серед багатьох файлів або впоратися з проблемою пошуку файлів у різних папках? У цій статті є відповіді, які ви шукаєте. Давайте поринемо у світ текстового пошуку та дізнаємося, як шукати різні тексти чи фрази в різних файлах у різноманітних папках за допомогою 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.
  • Визначте пошуковий запит із кількома термінами чи фразами.
  • Виконати сканування тексту методом Пошук і зберегти результати.
  • Перегляньте результати пошуку:
    • Отримайте кожен знайдений документ за допомогою методу GetFoundDocument.
    • Отримайте або роздрукуйте будь-яку інформацію про файл для знайденого документа.
    • Налаштуйте OutputAdapter для потрібного формату та шляху.
    • Створіть Highlighter для документа.
    • Виділіть і виведіть результати пошуку у файл HTML за допомогою методу підсвічування.
// Текстовий пошук у кількох файлах різних форматів у кількох папках за допомогою 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, читачам радимо звернутися до документації.

Будь-які запитання чи додаткові обговорення можна направляти на доступний форум.

Дивись також