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