Você já se perguntou como pesquisar facilmente vários arquivos ou talvez navegar pela complexidade da pesquisa em arquivos em várias pastas? Todas as suas dúvidas encontram respostas aqui. Este artigo se aprofunda no domínio da digitalização de texto, mostrando como pesquisar vários textos ou frases em vários arquivos espalhados por diversas pastas usando Java.

API Java para digitalização de texto em arquivos e pastas

Hoje, usaremos a API GroupDocs.Search for Java para pesquisar vários textos em arquivos de vários formatos em pastas. Esta biblioteca nos permite digitalizar programaticamente o texto em uma ampla variedade de formatos de arquivo para documentos do Word, planilhas, apresentações, arquivos PDF, arquivos de marcação, e-books, mensagens de e-mail, documentos do One Note e arquivos ZIP. A documentação fornece uma lista detalhada de formatos de arquivo suportados.

Você pode fazer download do arquivo JAR na seção de downloads ou usar o repositório mais recente e configurações de dependência do Maven em seus aplicativos Java.

Pesquisando vários textos em arquivos em pastas usando Java

Siga as etapas a seguir para realizar uma pesquisa de texto em vários arquivos em várias pastas usando Java e gerar arquivos de saída HTML destacados para cada documento encontrado.

  • Crie um objeto Index com o caminho da pasta de índice especificado.
  • Indexe a pasta do documento pai usando o método add.
  • Defina uma consulta de pesquisa com vários termos ou frases.
  • Execute a digitalização de texto usando o método de pesquisa e armazene os resultados.
  • Itere pelos resultados da pesquisa:
    • Acesse cada documento encontrado usando o método getFoundDocument.
    • Acesse ou imprima qualquer informação do arquivo do documento encontrado.
    • Configure um OutputAdapter para o formato e caminho desejado.
    • Crie um Marcador para o documento.
    • Destaque e envie os resultados da pesquisa para um arquivo HTML usando o método de destaque.
// Pesquisa de texto em vários arquivos de vários formatos de arquivo em várias pastas usando Java

// Criando um índice na pasta especificada
Index index = new Index("path/for/indexingFolder");

// Indexando documentos da pasta especificada
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);
}

O código acima permite que você pesquise textos específicos em vários arquivos e gere arquivos de saída HTML destacados para cada documento encontrado.

Resultados de pesquisa de texto destacado em formato HTML

Imprimindo os resultados da pesquisa de texto

A partir do resultado da consulta de pesquisa, você pode extrair ainda mais informações sobre os documentos encontrados.

// Imprimindo resultados da pesquisa ===

for (int i = 0 ; i < result.getDocumentCount(); i++)
{
    FoundDocument document = result.getFoundDocument(i);
 
    // Imprimindo resultados da pesquisa ===========
    System.out.println("Occurrences: " + document.getOccurrenceCount());
    for (FoundDocumentField field : document.getFoundFields()) {
        System.out.println("\tField: " + field.getFieldName());
        System.out.println("\tOccurrences: " + field.getOccurrenceCount());

        // Imprimindo termos encontrados
        if (field.getTerms() != null) {
            for (int k = 0; k < field.getTerms().length; k++) {
                System.out.println("\t\t" + field.getTerms()[k] + " - " + field.getTermsOccurrences()[k]);
            }
        }
        // Imprimindo frases encontradas
        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]);
            }
        }
    }
}

A seguir será o resultado da impressão dos resultados da pesquisa acima obtidos nos arquivos DOCX, PDF e 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

Código completo

Aqui está o código Java completo que pesquisa coletivamente as sequências de texto e frases em vários arquivos e pastas:

// Pesquisa de texto em vários arquivos de vários formatos de arquivo em várias pastas usando Java

// Criando um índice na pasta especificada
Index index = new Index("path/for/indexingFolder");

// Indexando documentos da pasta especificada
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);
  
    // Imprimindo resultados da pesquisa ===========
    System.out.println("Occurrences: " + document.getOccurrenceCount());
    for (FoundDocumentField field : document.getFoundFields()) {
        System.out.println("\tField: " + field.getFieldName());
        System.out.println("\tOccurrences: " + field.getOccurrenceCount());

        // Imprimindo termos encontrados
        if (field.getTerms() != null) {
            for (int k = 0; k < field.getTerms().length; k++) {
                System.out.println("\t\t" + field.getTerms()[k] + " - " + field.getTermsOccurrences()[k]);
            }
        }
        // Imprimindo frases encontradas
        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]);
            }
        }
    }  
}

Obtendo uma licença gratuita ou uma avaliação gratuita

Licença gratuita

Para explorar esta biblioteca sem restrições, você pode obter uma licença temporária gratuita.

Teste grátis

Baixe a avaliação gratuita na seção de downloads.

API Java para pesquisa em arquivos e pastas

Conclusão

Neste artigo, acabamos de explorar a digitalização de texto para pesquisar vários textos em vários arquivos em várias pastas usando Java. Começando com a consulta de pesquisa, pesquisamos em vários arquivos e pastas e destacamos os resultados encontrados nos respectivos arquivos HTML.

Para obter informações detalhadas sobre a API, os leitores são incentivados a consultar a documentação. Perguntas e discussões adicionais podem ser direcionadas para o fórum fornecido.

Veja também