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

Java API для сканирования текста в файлах и папках

Сегодня мы будем использовать API GroupDocs.Search for Java для поиска нескольких текстов в файлах различных форматов в папках. Эта библиотека позволяет нам программно сканировать текст в широком диапазоне форматов файлов для документов Word, электронных таблиц, презентаций, файлов PDF, файлов разметки, электронных книг, сообщений электронной почты, документов One Note и ZIP-архивов. В документации представлен подробный список поддерживаемых форматов файлов.

Вы можете загрузить файл JAR из раздела загрузок или использовать последние конфигурации репозитория и зависимостей Maven в своих приложениях Java.

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

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

  • Создайте объект Index с указанным путем к индексной папке.
  • Индексируйте папку родительского документа, используя метод add.
  • Определите поисковый запрос с несколькими терминами или фразами.
  • Выполните сканирование текста с помощью метода поиска и сохраните результаты.
  • Просмотрите результаты поиска:
    • Получите доступ к каждому найденному документу с помощью метода getFoundDocument.
    • Получите доступ или распечатайте любую информацию о найденном документе.
    • Настройте OutputAdapter для желаемого формата и пути.
    • Создайте для документа Выделитель.
    • Выделите и выведите результаты поиска в файл 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 читателям рекомендуется обратиться к документации. Вопросы и дальнейшее обсуждение можно направлять на предусмотренный форум.

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