- Ви не знаєте, який колір або його написання використано в документі.
- Шукаю «Джон», але це могло бути написано як «Джон» або, можливо, «Джон».
- Розташування «США», коли користувач вводить «США».
- Слово або фраза, яку ви шукаєте, може мати «помилку», на жаль, це знову «помилка».
Ось і нечіткий пошук. Нечіткий пошук дозволяє знаходити приблизні, а не точні збіги в даних, забезпечуючи гнучкість пошукових запитів. Це особливо корисно в сценаріях з опечатками, орфографічними помилками або варіаціями в даних. У цій статті показано, як програмно виконати нечіткий пошук у кількох документах у папках за допомогою C#.
Бібліотека нечіткого пошуку C#
Для нечіткого пошуку ми будемо використовувати API GroupDocs.Search for .NET. Це забезпечує певний ступінь толерантності в правописі, що робить його ефективним у пристосуванні регіональних мовних варіацій, наприклад, між британською та американською англійською.
Ця бібліотека дає нам змогу програмно шукати текст у різноманітних форматах файлів, таких як документи Word (DOC, DOCX), електронні таблиці (XLS, XLSX), презентації (PPT, PPTX), PDF-файли, розмітка (HTML, XML), Markdown (MD), електронні книги (EPUB, CHM, FB2), повідомлення електронної пошти (MSG, EML), документи OneNote та архіви ZIP.
Щоб дізнатися про всі типи файлів, з якими можна працювати, перегляньте документацію.
Ви можете отримати DLL або інсталятор MSI із розділу завантаження або додати API до своєї програми .NET за допомогою NuGet.
Здійснюємо нечіткий пошук у файлах за допомогою C#
Виконайте такі кроки, щоб виконати нечіткий пошук у кількох файлах різних форматів у папках за допомогою C#:
- Створіть Індекс, указавши шлях до папки.
- Додайте шлях батьківської папки для каталогу пошуку до створеного індексу.
- Визначте пошуковий запит.
- Активуйте нечіткий пошук, увімкнувши опцію.
- За потреби встановіть рівень подібності в нечіткому алгоритмі.
- Щоб отримати результати пошуку, виконайте пошук за допомогою методу Search.
- Тепер ви можете повторити SearchResults, щоб створити або надрукувати результат, як вам подобається.
Нечіткий пошук у згаданому нижче коді C# знаходить приблизні збіги заданого запиту в усіх файлах у всіх вкладених папках із 20% допустимою помилкою в орфографії.
// Нечіткий пошук кількох файлів у кількох папках за допомогою C#
// Створення індексної папки та додавання до неї папки документа
Index index = new Index("indexing-folder-path");
index.Add("path/parent-folder");
SearchOptions options = new SearchOptions();
options.FuzzySearch.Enabled = true; // Enabling the fuzzy search
options.FuzzySearch.FuzzyAlgorithm = new SimilarityLevel(0.8);
string query = "nulla"; // search approximate matches of the provided query
SearchResult result = index.Search(query, options);
Тут рівень подібності встановлено на 0,8, тобто 80% збігу, що відповідає 20% допуску до помилок. Ви можете налаштувати рівень допуску, налаштувавши рівень схожості в коді.
Нижче наведено нечіткі результати пошуку, які можна отримати з коду вище. Це досить просто, однак код для друку також доступний далі в цій статті.
Query: nulla
Documents: 2
Occurrences: 135
Document: Lorem ipsum.docx
Occurrences: 132
Field: content
Occurrences: 132
nulla 98
nullam 34
Document: EnglishText.txt
Occurrences: 3
Field: content
Occurrences: 3
dull 1
full 1
fully 1
Друк результатів пошуку
Наведений нижче код C# пропонує два способи представлення результатів пошуку.
- Виділіть усі приблизні збіги.
- Роздрукуйте результати в зручному для читання та аналізу форматі
// Виділення та друк результатів пошуку для всіх документів за допомогою C#
for (int i = 0; i < result.DocumentCount; i++)
{
FoundDocument document = result.GetFoundDocument(i);
OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, indexFolder + "/Highlight" + i + ".html");
Highlighter highlighter = new DocumentHighlighter(outputAdapter);
index.Highlight(document, highlighter);
Console.WriteLine("\tDocument: " + document.DocumentInfo.FilePath);
Console.WriteLine("\tOccurrences: " + document.OccurrenceCount);
for (int j = 0; j < document.FoundFields.Length; j++)
{
FoundDocumentField field = document.FoundFields[j];
Console.WriteLine("\t\tField: " + field.FieldName);
Console.WriteLine("\t\tOccurrences: " + document.OccurrenceCount);
// Друк знайдених термінів
if (field.Terms != null)
{
for (int k = 0; k < field.Terms.Length; k++)
{
Console.WriteLine("\t\t\t" + field.Terms[k].PadRight(20) + field.TermsOccurrences[k]);
}
}
}
Console.WriteLine("===========================================");
}
Отримання безкоштовної ліцензії або безкоштовної пробної версії
Безкоштовна ліцензія
Отримайте тимчасову ліцензію безкоштовно, щоб без обмежень досліджувати цю бібліотеку.
Безкоштовне випробування
Ви можете завантажити безкоштовну пробну версію з розділу завантажень.
Висновок
У цій статті ми розглянули програмний підхід C# до магії нечіткого пошуку, щоб знайти всі приблизні відповідні слова, але з певним ступенем терпимості до помилок. Ця функція робить нечіткий пошук ефективним для визначення регіональних мовних варіацій, як-от між британською та американською англійською, друкарських помилок у тексті, варіантів імен і фонетичних відповідностей.
Щоб отримати повну інформацію про API, читачам радимо звернутися до документації.
Будь-які запитання чи додаткові обговорення можна направляти на форум.