Heeft u zich ooit afgevraagd hoe u naadloos door talloze bestanden kunt zoeken, of hoe u door de complexiteit van het zoeken in bestanden in meerdere mappen kunt navigeren? Al uw vragen vinden hier antwoorden. Dit artikel duikt in het domein van het scannen van tekst en laat zien hoe u met behulp van Java kunt zoeken naar meerdere teksten of zinsdelen in verschillende bestanden, verspreid over verschillende mappen.

Java API voor het scannen van tekst in bestanden en mappen

Vandaag gebruiken we de API GroupDocs.Search for Java om meerdere teksten in bestanden met verschillende bestandsformaten in mappen te doorzoeken. Met deze bibliotheek kunnen we de tekst programmatisch scannen binnen een groot aantal bestandsindelingen voor Word-documenten, spreadsheets, presentaties, PDF-bestanden, opmaakbestanden, eBooks, e-mailberichten, One Note-documenten en ZIP-archieven. De documentatie biedt een gedetailleerde lijst van ondersteunde bestandsformaten.

U kunt het JAR-bestand downloaden via de downloadsectie of de nieuwste opslagplaats en afhankelijkheid Maven-configuraties gebruiken binnen uw Java-applicaties.

Meerdere teksten in bestanden in mappen doorzoeken met Java

Volg de volgende stappen om een tekstzoekopdracht uit te voeren in meerdere bestanden in meerdere mappen met behulp van Java en om voor elk gevonden document gemarkeerde HTML-uitvoerbestanden te genereren.

  • Maak een Index-object met het opgegeven indexmappad.
  • Indexeer de bovenliggende documentmap met behulp van de add-methode.
  • Definieer een zoekopdracht met meerdere termen of woordgroepen.
  • Voer de tekstscan uit met behulp van de zoekmethode en sla de resultaten op.
  • Blader door de zoekresultaten:
    • Krijg toegang tot elk gevonden document met behulp van de getFoundDocument-methode.
    • Open of druk alle bestandsinformatie voor het gevonden document af.
    • Stel een OutputAdapter in voor het gewenste formaat en pad.
    • Maak een Highlighter voor het document.
    • Markeer en voer de zoekresultaten uit naar een HTML-bestand met behulp van de highlight-methode.
// Tekst zoeken in meerdere bestanden met verschillende bestandsformaten binnen meerdere mappen met behulp van Java

// Een index maken in de opgegeven map
Index index = new Index("path/for/indexingFolder");

// Documenten uit de opgegeven map indexeren
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);
}

Met de bovenstaande code kunt u gezamenlijk naar specifieke teksten in meerdere bestanden zoeken en voor elk gevonden document gemarkeerde HTML-uitvoerbestanden genereren.

Gemarkeerde tekstzoekresultaten in HTML-indeling

De tekstzoekresultaten afdrukken

Uit het resultaat van de zoekopdracht kunt u verdere informatie over de gevonden documenten halen.

// Zoekresultaten afdrukken ===

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

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

Het volgende is de uitvoer van het afdrukken van de bovenstaande zoekresultaten verkregen uit de DOCX-, PDF- en TXT-bestanden:

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

Volledige code

Hier is de volledige Java-code die gezamenlijk de tekstreeksen en zinsdelen in meerdere bestanden en mappen doorzoekt:

// Tekst zoeken in meerdere bestanden met verschillende bestandsformaten binnen meerdere mappen met behulp van Java

// Een index maken in de opgegeven map
Index index = new Index("path/for/indexingFolder");

// Documenten uit de opgegeven map indexeren
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);
  
    // Zoekresultaten afdrukken ===========
    System.out.println("Occurrences: " + document.getOccurrenceCount());
    for (FoundDocumentField field : document.getFoundFields()) {
        System.out.println("\tField: " + field.getFieldName());
        System.out.println("\tOccurrences: " + field.getOccurrenceCount());

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

Een gratis licentie of een gratis proefversie verkrijgen

Gratis vergunning

Om deze bibliotheek zonder beperkingen te verkennen, kunt u een [tijdelijke gratis licentie] verkrijgen6.

Gratis proefperiode

Download de gratis proefversie via de downloadsectie.

Java API voor zoeken in bestanden en mappen

Conclusie

In dit artikel hebben we zojuist tekstscannen onderzocht om meerdere teksten in meerdere bestanden in meerdere mappen te doorzoeken met behulp van Java. Beginnend met de zoekopdracht hebben we in meerdere bestanden en mappen gezocht en de gevonden resultaten in de betreffende HTML-bestanden gemarkeerd.

Voor gedetailleerde API-informatie worden lezers aangemoedigd de documentatie te raadplegen. Vragen en verdere discussies kunnen worden gericht aan het voorziene forum.

Zie ook