Ви коли-небудь замислювалися над тим, як безперешкодно шукати численні файли, чи, можливо, впоратися зі складністю пошуку файлів у кількох папках? Тут можна знайти відповіді на всі ваші запитання. Ця стаття заглиблюється в сферу сканування тексту, демонструючи, як шукати кілька текстів або фраз у різних файлах, розкиданих у різноманітних папках, за допомогою 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 для кожного знайденого документа.

Результати пошуку виділеного тексту у форматі 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 API для пошуку у файлах і папках

Висновок

У цій статті ми щойно досліджували сканування тексту для пошуку кількох текстів у кількох файлах у кількох папках за допомогою Java. Починаючи з пошукового запиту, ми здійснили пошук у кількох файлах і папках і виділили знайдені результати у відповідних файлах HTML.

Для отримання детальної інформації про API читачам пропонується ознайомитися з документацією. Запитання та подальші обговорення можна направляти на наданий форум.

Дивись також