Чи замислювалися ви коли-небудь про те, як легко здійснювати пошук серед багатьох файлів або впоратися з проблемою пошуку файлів у різних папках? У цій статті є відповіді, які ви шукаєте. Давайте поринемо у світ текстового пошуку та дізнаємося, як шукати різні тексти чи фрази в різних файлах у різноманітних папках за допомогою 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 для кожного знайденого документа.
Друк результатів текстового пошуку
З результату пошукового запиту можна додатково отримати інформацію про знайдені документи.
// Друк результату
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]);
}
}
}
}
Отримання безкоштовної ліцензії або безкоштовної пробної версії
Безкоштовна ліцензія
Отримайте безкоштовно тимчасову ліцензію, щоб досліджувати цю бібліотеку без обмежень.
Безкоштовне випробування
Ви можете завантажити безкоштовну пробну версію з розділу завантажень.
Висновок
У цій статті ми досліджували сканування тексту для пошуку різноманітних текстів у численних файлах у кількох папках за допомогою C#. Починаючи з пошукового запиту, ми досліджували декілька файлів і папок, виділяючи шукані слова чи фрази у відповідних файлах HTML.
Щоб отримати повну інформацію про API, читачам радимо звернутися до документації.
Будь-які запитання чи додаткові обговорення можна направляти на доступний форум.