Нечеткий поиск с использованием Java

Нечеткий поиск помогает вам находить в ваших данных контент, который отчасти похож, но не совсем совпадает. Это очень удобно, когда есть небольшие опечатки, орфографические ошибки или различия в данных. Эта статья посвящена Java-способу выполнения нечеткого поиска в файлах, разбросанных по папкам.

Вот несколько примеров для разработки содержимого образца нечеткого поиска:

  • Вы можете быть не уверены, используется ли в документе написание «цвет» или «цвет».
  • При поиске «Джон» на самом деле его можно написать как «Джон» или, возможно, «Джон».
  • Пытаюсь найти «США», даже если кто-то вводит «США».
  • Если вы допустили «ошибку», ой, подождите, это на самом деле «ошибка».

Решением для поиска такого контента является Fuzzy Search.

Библиотека нечеткого поиска Java

Чтобы выполнить нечеткий поиск в Java, мы будем использовать API GroupDocs.Search for Java. API обладает высокой гибкостью и обеспечивает настраиваемую степень устойчивости к ошибкам. Эта функция удобна при работе с языковыми вариациями, такими как британский и американский английский, а также с опечатками.

С помощью этой библиотеки можно выполнять нечеткий поиск в самых разных форматах файлов. Поддержка не ограничивается документами Word (DOC, DOCX), электронными таблицами (XLS, XLSX), презентациями (PPT, PPTX), PDF-файлами, языками разметки (HTML, XML), Markdown (MD), электронными книгами (EPUB, CHM, FB2), электронные письма (MSG, EML), заметки OneNote и даже ZIP-архивы.

Если вы хотите узнать все типы файлов, с которыми может работать эта магия, просто загляните в документацию.

Для начала вы можете получить API из раздела загрузки или просто добавить последние конфигурации репозитория и зависимостей Maven непосредственно в ваши Java-приложения.

Давайте нечеткий поиск в файлах с использованием Java

Выполните следующие шаги, чтобы выполнить нечеткий поиск в нескольких файлах различных форматов в папках с использованием Java:

  1. Начните с создания Index с использованием папки, в которой находятся ваши файлы.
  2. Добавьте путь к основной папке в index.
  3. Укажите поисковый запрос, который вы хотите найти.
  4. Включите магию нечеткого поиска, чтобы он понимал небольшие ошибки.
  5. Установите уровень подобия в нечетком алгоритме.
  6. Выполните поиск, используя метод search, чтобы получить результаты поиска.
  7. Теперь вы можете просмотреть SearchResults для создания или печати результатов по своему усмотрению.

В приведенном ниже коде Java программа ищет аналогичный контент, который соответствует вашему запросу, во всех файлах и подпапках. Терпим к орфографическим ошибкам, до 25% ошибок. Если вы посмотрите на код, то увидите, что уровень сходства установлен на 0,75, что эквивалентно совпадению 75%. Если вы хотите уточнить поиск, просто измените уровень сходства в коде.

// Нечеткий поиск нескольких файлов в нескольких папках с использованием Java

// Создание индексной папки и добавление в нее папки документа
Index index = new Index("path/indexing-folder-path");
index.add("path/parent-folder");

SearchOptions options = new SearchOptions();
options.getFuzzySearch().setEnabled(true); // Enabling the fuzzy search
options.getFuzzySearch().setFuzzyAlgorithm(new SimilarityLevel(0.75));

String query = "nulla"; // search approximate matches of the provided query  
SearchResult result = index.search(query, options);

После запуска кода вы получите список нечетких результатов поиска. Если вы хотите узнать, как распечатать результаты поиска, продолжайте читать эту статью.

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

Печать результатов поиска

Следующий код Java предоставляет два способа представления результатов поиска.

  • Выделите все приблизительные совпадения.
  • Распечатайте результаты в читаемом и анализируемом формате.
// Выделите и распечатайте результаты поиска для всех документов с использованием Java
for (int i = 0 ; i < result.getDocumentCount(); i++)
{
    FoundDocument document = result.getFoundDocument(i);
  
    OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, "path/Highlight" + i + ".html");
    Highlighter highlighter = new DocumentHighlighter(outputAdapter);
    index.highlight(document, highlighter);
 
    System.out.println("\tDocument: " + document.getDocumentInfo().getFilePath());
    System.out.println("\tOccurrences: " + document.getOccurrenceCount());
    for (FoundDocumentField field : document.getFoundFields()) {
        System.out.println("\t\tField: " + field.getFieldName());
        System.out.println("\t\tOccurrences: " + field.getOccurrenceCount());

        // Печать найденных терминов
        if (field.getTerms() != null) {
            for (int k = 0; k < field.getTerms().length; k++) {
                System.out.println("\t\t\t" + field.getTerms()[k] + " - " + field.getTermsOccurrences()[k]);
            }
        }
    }
}

Получение бесплатной лицензии или бесплатной пробной версии

Бесплатная лицензия

Получите временную лицензию бесплатно, чтобы пользоваться этой библиотекой без ограничений.

Бесплатная пробная версия

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

Java API для поиска в файлах и папках

Заключение

В этой статье мы рассмотрели программный способ Java для выполнения нечеткого поиска. Это помогает найти примерное совпадение слов, которые чем-то похожи, даже если есть небольшие ошибки. Эта функция удобна для устранения различий между британским и американским английским языком, опечаток, изменений имен и похожих звуков в словах.

Дополнительную информацию об API см. в документации.

Если у вас есть вопросы или вы хотите обсудить больше, зайдите на форум.


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