Ti sei mai chiesto come eseguire una ricerca senza problemi tra numerosi file o magari come affrontare la complessità della ricerca all’interno di file in più cartelle? Tutte le tue domande trovano risposta qui. Questo articolo approfondisce il regno della scansione del testo, mostrando come cercare più testi o frasi in vari file distribuiti in diverse cartelle utilizzando Java.

API Java per la scansione di testo tra file e cartelle

Oggi utilizzeremo l’API GroupDocs.Search for Java per cercare più testi all’interno di file di vari formati di file nelle cartelle. Questa libreria ci consente di scansionare a livello di codice il testo all’interno di un’ampia gamma di formati di file per documenti Word, fogli di calcolo, presentazioni, file PDF, file Markup, eBook, messaggi e-mail, documenti One Note e archivi ZIP. La documentazione fornisce un elenco dettagliato dei formati di file supportati.

Puoi scaricare il file JAR dalla sezione download o utilizzare le ultime configurazioni di repository e dipendenze Maven all’interno delle tue applicazioni Java.

Ricerca di più testi in file tra cartelle utilizzando Java

Seguire i passaggi seguenti per eseguire una ricerca di testo in più file all’interno di più cartelle utilizzando Java e generare file di output HTML evidenziati per ciascun documento trovato.

  • Creare un oggetto Indice con il percorso della cartella indice specificato.
  • Indicizzare la cartella del documento principale utilizzando il metodo di aggiunta.
  • Definire una query di ricerca con più termini o frasi.
  • Esegui la scansione del testo utilizzando il metodo di ricerca e memorizza i risultati.
  • Scorri i risultati della ricerca:
    • Accedi a ciascun documento trovato utilizzando il metodo getFoundDocument.
    • Accedi o stampa qualsiasi informazione sul file per il documento trovato.
    • Configurare un OutputAdapter per il formato e il percorso desiderati.
    • Crea un Evidenziatore per il documento.
    • Evidenzia e genera i risultati della ricerca in un file HTML utilizzando il metodo di evidenziazione.
// Ricerca di testo in più file di vari formati di file all'interno di più cartelle utilizzando Java

// Creazione di un indice nella cartella specificata
Index index = new Index("path/for/indexingFolder");

// Indicizzazione dei documenti dalla cartella specificata
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);
}

Il codice precedente consente collettivamente di cercare testi specifici all’interno di più file e generare file di output HTML evidenziati per ciascun documento trovato.

Risultati della ricerca di testo evidenziati in formato HTML

Stampa dei risultati della ricerca di testo

Dal risultato della query di ricerca è possibile estrarre ulteriori informazioni sui documenti trovati.

// Stampa dei risultati della ricerca ===

for (int i = 0 ; i < result.getDocumentCount(); i++)
{
    FoundDocument document = result.getFoundDocument(i);
 
    // Stampa dei risultati della ricerca ===========
    System.out.println("Occurrences: " + document.getOccurrenceCount());
    for (FoundDocumentField field : document.getFoundFields()) {
        System.out.println("\tField: " + field.getFieldName());
        System.out.println("\tOccurrences: " + field.getOccurrenceCount());

        // Stampa dei termini trovati
        if (field.getTerms() != null) {
            for (int k = 0; k < field.getTerms().length; k++) {
                System.out.println("\t\t" + field.getTerms()[k] + " - " + field.getTermsOccurrences()[k]);
            }
        }
        // Stampa delle frasi trovate
        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]);
            }
        }
    }
}

Quello che segue sarà l’output della stampa dei risultati della ricerca sopra ottenuti dai file 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

Codice completo

Ecco il codice Java completo che cerca collettivamente stringhe di testo e frasi in più file e cartelle:

// Ricerca di testo in più file di vari formati di file all'interno di più cartelle utilizzando Java

// Creazione di un indice nella cartella specificata
Index index = new Index("path/for/indexingFolder");

// Indicizzazione dei documenti dalla cartella specificata
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);
  
    // Stampa dei risultati della ricerca ===========
    System.out.println("Occurrences: " + document.getOccurrenceCount());
    for (FoundDocumentField field : document.getFoundFields()) {
        System.out.println("\tField: " + field.getFieldName());
        System.out.println("\tOccurrences: " + field.getOccurrenceCount());

        // Stampa dei termini trovati
        if (field.getTerms() != null) {
            for (int k = 0; k < field.getTerms().length; k++) {
                System.out.println("\t\t" + field.getTerms()[k] + " - " + field.getTermsOccurrences()[k]);
            }
        }
        // Stampa delle frasi trovate
        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]);
            }
        }
    }  
}

Ottenere una licenza gratuita o una prova gratuita

Licenza gratuita

Per esplorare questa libreria senza vincoli, puoi ottenere una licenza temporanea gratuita.

Prova gratuita

Scarica la versione di prova gratuita dalla sezione download.

API Java per la ricerca all'interno di file e cartelle

Conclusione

In questo articolo, abbiamo appena esplorato la scansione del testo per cercare più testi in più file in più cartelle utilizzando Java. A partire dalla query di ricerca, abbiamo cercato all’interno di più file e cartelle ed evidenziato i risultati trovati nei rispettivi file HTML.

Per informazioni dettagliate sull’API, i lettori sono incoraggiati a consultare la documentazione. Domande e ulteriori discussioni possono essere indirizzate al [forum] fornito 7.

Guarda anche