Нечіткий пошук за допомогою Java

Нечіткий пошук допомагає вам знаходити у ваших даних вміст, який схожий, але не зовсім однаковий. Це надзвичайно зручно, коли є невеликі друкарські помилки, орфографічні помилки або варіанти даних. У цій статті йдеться про те, як Java виконує нечіткий пошук у файлах, розкиданих по папках.

Нижче наведено кілька прикладів для розробки зразка вмісту нечіткого пошуку:

  • Можливо, ви не впевнені, чи в документі використовується слово «колір» або «колір».
  • Якщо шукати “Джон”, воно насправді може бути написане як “Джон” або, можливо, “Джон”.
  • Спроба знайти “США”, навіть якщо хтось вводить “США”
  • Якщо ви робите «помилку», о, зачекайте, це насправді «помилка».

Рішенням для пошуку такого вмісту є нечіткий пошук.

Бібліотека нечіткого пошуку 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. Почніть із створення Індексу за допомогою папки, де зберігаються ваші файли.
  2. Додайте шлях основної папки до індексу.
  3. Введіть пошуковий запит, за яким потрібно виконати пошук.
  4. Увімкніть магію Fuzzy Search, щоб він розумів дрібні помилки.
  5. Встановіть рівень подібності в нечіткому алгоритмі.
  6. Виконайте пошук за допомогою методу пошуку, щоб отримати результати пошуку.
  7. Тепер ви можете переглянути Результати пошуку, щоб створити або надрукувати результат, як вам подобається.

У наведеному нижче коді 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, перегляньте документацію.

Якщо у вас є запитання або ви хочете обговорити більше, перейдіть на форум.


Дивись також