Нечіткий пошук за допомогою C# .NET
  • Ви не знаєте, який колір або його написання використано в документі.
  • Шукаю «Джон», але це могло бути написано як «Джон» або, можливо, «Джон».
  • Розташування «США», коли користувач вводить «США».
  • Слово або фраза, яку ви шукаєте, може мати «помилку», на жаль, це знову «помилка».

Ось і нечіткий пошук. Нечіткий пошук дозволяє знаходити приблизні, а не точні збіги в даних, забезпечуючи гнучкість пошукових запитів. Це особливо корисно в сценаріях з опечатками, орфографічними помилками або варіаціями в даних. У цій статті показано, як програмно виконати нечіткий пошук у кількох документах у папках за допомогою 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("===========================================");
}

Отримання безкоштовної ліцензії або безкоштовної пробної версії

Безкоштовна ліцензія

Отримайте тимчасову ліцензію безкоштовно, щоб без обмежень досліджувати цю бібліотеку.

Безкоштовне випробування

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

.NET API для пошуку у файлах і папках

Висновок

У цій статті ми розглянули програмний підхід C# до магії нечіткого пошуку, щоб знайти всі приблизні відповідні слова, але з певним ступенем терпимості до помилок. Ця функція робить нечіткий пошук ефективним для визначення регіональних мовних варіацій, як-от між британською та американською англійською, друкарських помилок у тексті, варіантів імен і фонетичних відповідностей.

Щоб отримати повну інформацію про API, читачам радимо звернутися до документації.

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


Дивись також