¿Alguna vez se preguntó cómo buscar sin problemas en numerosos archivos, o tal vez navegar por la complejidad de buscar dentro de archivos en varias carpetas? Todas tus consultas encuentran respuesta aquí. Este artículo profundiza en el ámbito del escaneo de texto y muestra cómo buscar múltiples textos o frases en varios archivos distribuidos en diversas carpetas usando Java.

API de Java para escanear texto en archivos y carpetas

Hoy, usaremos la API GroupDocs.Search for Java para buscar múltiples textos dentro de archivos de varios formatos de archivo en carpetas. Esta biblioteca nos permite escanear mediante programación el texto dentro de una amplia gama de formatos de archivo para documentos de Word, hojas de cálculo, presentaciones, archivos PDF, archivos de marcado, libros electrónicos, mensajes de correo electrónico, documentos de One Note y archivos ZIP. La documentación proporciona una lista detallada de formatos de archivo compatibles.

Puede descargar el archivo JAR desde la sección de descargas o utilizar las últimas configuraciones de repositorio y dependencia de Maven dentro de sus aplicaciones Java.

Buscar múltiples textos en archivos en carpetas usando Java

Siga los siguientes pasos para realizar una búsqueda de texto en varios archivos dentro de varias carpetas utilizando Java y generar archivos de salida HTML resaltados para cada documento encontrado.

  • Cree un objeto Índice con la ruta de la carpeta de índice especificada.
  • Indexe la carpeta de documentos principal utilizando el método agregar.
  • Defina una consulta de búsqueda con varios términos o frases.
  • Ejecute el escaneo de texto utilizando el método de búsqueda y almacene los resultados.
  • Iterar a través de los resultados de la búsqueda:
    • Acceda a cada documento encontrado utilizando el método getFoundDocument.
    • Acceda o imprima cualquier información de archivo para el documento encontrado.
    • Configure un OutputAdapter para el formato y la ruta deseados.
    • Cree un Resaltador para el documento.
    • Resalte y envíe los resultados de la búsqueda a un archivo HTML utilizando el método de resaltado.
// Búsqueda de texto en varios archivos de varios formatos de archivo dentro de varias carpetas utilizando Java

// Crear un índice en la carpeta especificada
Index index = new Index("path/for/indexingFolder");

// Indexar documentos de la carpeta 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);
}

El código anterior en conjunto le permite buscar textos específicos dentro de múltiples archivos y generar archivos de salida HTML resaltados para cada documento encontrado.

Resultados de búsqueda de texto resaltado en formato HTML

Impresión de los resultados de la búsqueda de texto

Del resultado de la consulta de búsqueda, puede extraer más información sobre los documentos encontrados.

// Imprimir resultados de búsqueda ===

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

        // Impresión de términos 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]);
            }
        }
        // Imprimir 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]);
            }
        }
    }
}

El siguiente será el resultado de imprimir los resultados de búsqueda anteriores obtenidos de los archivos DOCX, PDF y 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

Aquí está el código Java completo que busca colectivamente cadenas de texto y frases en múltiples archivos y carpetas:

// Búsqueda de texto en varios archivos de varios formatos de archivo dentro de varias carpetas utilizando Java

// Crear un índice en la carpeta especificada
Index index = new Index("path/for/indexingFolder");

// Indexar documentos de la carpeta 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);
  
    // Imprimir resultados de búsqueda ===========
    System.out.println("Occurrences: " + document.getOccurrenceCount());
    for (FoundDocumentField field : document.getFoundFields()) {
        System.out.println("\tField: " + field.getFieldName());
        System.out.println("\tOccurrences: " + field.getOccurrenceCount());

        // Impresión de términos 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]);
            }
        }
        // Imprimir 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]);
            }
        }
    }  
}

Obtener una licencia gratuita o una prueba gratuita

Licencia gratuita

Para explorar esta biblioteca sin restricciones, puede obtener una licencia temporal gratuita.

Prueba gratis

Descarga la prueba gratuita desde la sección de descargas.

API de Java para buscar dentro de archivos y carpetas

Conclusión

En este artículo, acabamos de explorar el escaneo de texto para buscar múltiples textos en múltiples archivos en múltiples carpetas usando Java. Comenzando con la consulta de búsqueda, buscamos en varios archivos y carpetas y resaltamos los resultados encontrados en los respectivos archivos HTML.

Para obtener información detallada sobre la API, se recomienda a los lectores que consulten la documentación. Las preguntas y debates adicionales pueden dirigirse al foro proporcionado.

Ver también