Нечеткий поиск с использованием 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 читателям рекомендуется обратиться к документации.

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


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