Ви коли-небудь замислювалися над тим, як безперешкодно шукати численні файли, чи, можливо, впоратися зі складністю пошуку файлів у кількох папках? Тут можна знайти відповіді на всі ваші запитання. Ця стаття заглиблюється в сферу сканування тексту, демонструючи, як шукати кілька текстів або фраз у різних файлах, розкиданих у різноманітних папках, за допомогою Java.
Java API для сканування тексту між файлами та папками
Сьогодні ми використаємо API GroupDocs.Search for Java для пошуку кількох текстів у файлах різних форматів у папках. Ця бібліотека дозволяє нам програмно сканувати текст у широкому діапазоні форматів файлів для документів Word, електронних таблиць, презентацій, файлів PDF, файлів розмітки, електронних книг, повідомлень електронної пошти, документів One Note та архівів ZIP. У документації наведено детальний список підтримуваних форматів файлів.
Ви можете завантажити файл JAR із розділу завантажень або використати останнє сховище та конфігурації залежностей Maven у своїх програмах Java.
Пошук кількох текстів у файлах у папках за допомогою Java
Виконайте наступні дії, щоб виконати текстовий пошук у кількох файлах у кількох папках за допомогою Java та створити виділені вихідні файли HTML для кожного знайденого документа.
- Створіть об’єкт Index із указаним шляхом до папки індексу.
- Проіндексуйте папку батьківського документа за допомогою методу add.
- Визначте пошуковий запит із кількома термінами чи фразами.
- Виконати сканування тексту методом пошуку та зберегти результати.
- Перегляньте результати пошуку:
- Отримайте доступ до кожного знайденого документа за допомогою методу getFoundDocument.
- Доступ або друк будь-якої інформації про файл для знайденого документа.
- Налаштуйте OutputAdapter для потрібного формату та шляху.
- Створіть Highlighter для документа.
- Виділіть і виведіть результати пошуку у файл HTML за допомогою методу виділення.
 
// Текстовий пошук у кількох файлах різних форматів у кількох папках за допомогою Java
// Створення індексу у вказаній папці
Index index = new Index("path/for/indexingFolder");
// Індексація документів із зазначеної папки
index.add("path/parent-folder/");
String query = "water OR \"Lorem ipsum\" OR non";
SearchResult result = index.search(query);
for (int i = 0 ; i < result.getDocumentCount(); i++)
{
    FoundDocument document = result.getFoundDocument(i);
    System.out.println("====================================");
    System.out.println("File Name: " + document.getDocumentInfo().getFilePath());
    OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, "/path/Highlighted-" + i + ".html");
    Highlighter highlighter = new DocumentHighlighter(outputAdapter);
    index.highlight(document, highlighter);
}
Наведений вище код разом дає змогу шукати певні тексти в кількох файлах і генерувати виділені вихідні файли HTML для кожного знайденого документа.
 
 
Друк результатів текстового пошуку
З результату пошукового запиту можна додатково отримати інформацію про знайдені документи.
// Друк результатів пошуку ===
for (int i = 0 ; i < result.getDocumentCount(); i++)
{
    FoundDocument document = result.getFoundDocument(i);
 
    // Друк результатів пошуку ===========
    System.out.println("Occurrences: " + document.getOccurrenceCount());
    for (FoundDocumentField field : document.getFoundFields()) {
        System.out.println("\tField: " + field.getFieldName());
        System.out.println("\tOccurrences: " + field.getOccurrenceCount());
        // Друк знайдених термінів
        if (field.getTerms() != null) {
            for (int k = 0; k < field.getTerms().length; k++) {
                System.out.println("\t\t" + field.getTerms()[k] + " - " + field.getTermsOccurrences()[k]);
            }
        }
        // Друк знайдених фраз
        if (field.getTermSequences() != null) {
            for (int k = 0; k < field.getTermSequences().length; k++) {
                String[] terms = field.getTermSequences()[k];
                String sequence = "";
                for (String term : terms) {
                    sequence += term + " ";
                }
                System.out.println("\t\t" + sequence + " - " + field.getTermSequencesOccurrences()[k]);
            }
        }
    }
}
Нижче наведено результат друку наведених вище результатів пошуку, отриманих із файлів DOCX, PDF і TXT:
File Name: Lorem ipsum.docx
Occurrences: 101
	Field: filename
	Occurrences: 1
		lorem ipsum  - 1
	Field: content
	Occurrences: 100
		non - 94
		lorem ipsum  - 6
====================================
File Name: Lorem ipsum.pdf
Occurrences: 60
	Field: filename
	Occurrences: 1
		lorem ipsum  - 1
	Field: content
	Occurrences: 59
		non - 53
		lorem ipsum  - 6
====================================
File Name: English.txt
Occurrences: 39
	Field: content
	Occurrences: 39
		water - 39
Повний код
Ось повний код Java, який спільно шукає текстові рядки та фрази в кількох файлах і папках:
// Текстовий пошук у кількох файлах різних форматів у кількох папках за допомогою Java
// Створення індексу у вказаній папці
Index index = new Index("path/for/indexingFolder");
// Індексація документів із зазначеної папки
index.add("path/parent-folder/");
String query = "water OR \"Lorem ipsum\" OR non";
SearchResult result = index.search(query);
for (int i = 0 ; i < result.getDocumentCount(); i++)
{
    FoundDocument document = result.getFoundDocument(i);
    System.out.println("====================================");
    System.out.println("File Name: " + document.getDocumentInfo().getFilePath());
    OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, "/path/Highlighted-" + i + ".html");
    Highlighter highlighter = new DocumentHighlighter(outputAdapter);
    index.highlight(document, highlighter);
  
    // Друк результатів пошуку ===========
    System.out.println("Occurrences: " + document.getOccurrenceCount());
    for (FoundDocumentField field : document.getFoundFields()) {
        System.out.println("\tField: " + field.getFieldName());
        System.out.println("\tOccurrences: " + field.getOccurrenceCount());
        // Друк знайдених термінів
        if (field.getTerms() != null) {
            for (int k = 0; k < field.getTerms().length; k++) {
                System.out.println("\t\t" + field.getTerms()[k] + " - " + field.getTermsOccurrences()[k]);
            }
        }
        // Друк знайдених фраз
        if (field.getTermSequences() != null) {
            for (int k = 0; k < field.getTermSequences().length; k++) {
                String[] terms = field.getTermSequences()[k];
                String sequence = "";
                for (String term : terms) {
                    sequence += term + " ";
                }
                System.out.println("\t\t" + sequence + " - " + field.getTermSequencesOccurrences()[k]);
            }
        }
    }  
}
Отримання безкоштовної ліцензії або безкоштовної пробної версії
Безкоштовна ліцензія
Щоб досліджувати цю бібліотеку без обмежень, ви можете отримати безкоштовну тимчасову ліцензію.
Безкоштовне випробування
Завантажте безкоштовну пробну версію з розділу завантажень.
 
 
Висновок
У цій статті ми щойно досліджували сканування тексту для пошуку кількох текстів у кількох файлах у кількох папках за допомогою Java. Починаючи з пошукового запиту, ми здійснили пошук у кількох файлах і папках і виділили знайдені результати у відповідних файлах HTML.
Для отримання детальної інформації про API читачам пропонується ознайомитися з документацією. Запитання та подальші обговорення можна направляти на наданий форум.