Heeft u zich ooit afgevraagd hoe u eenvoudig door veel bestanden kunt zoeken of hoe u de uitdaging van het zoeken in bestanden in verschillende mappen kunt aangaan? Dit artikel bevat de antwoorden die u zoekt. Laten we een duik nemen in de wereld van het zoeken naar tekst en ontdekken hoe u met C# naar verschillende teksten of zinsdelen in verschillende bestanden in verschillende mappen kunt zoeken.

C# API voor het scannen van tekst in bestanden en mappen

Nu zullen we de GroupDocs.Search for .NET API gebruiken om talloze teksten in bestanden met verschillende formaten in verschillende mappen te verkennen. Met deze bibliotheek kunnen we systematisch tekst scannen in een uitgebreide reeks bestandsformaten, zoals Word-documenten, spreadsheets, presentaties, PDF-bestanden, opmaakbestanden, eBooks, e-mailberichten, One Note-documenten en ZIP-archieven. Voor een uitgebreide lijst met ondersteunde bestandsformaten raadpleegt u de uitgebreide documentatie.

U heeft de mogelijkheid om de DLL’s of het MSI-installatieprogramma uit de downloadsectie te halen, of u kunt de API in uw .NET-applicatie installeren met behulp van NuGet.

PM> Install-Package GroupDocs.Search

Meerdere teksten in bestanden in mappen zoeken met C#

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

  • 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 het tekstscannen uit met behulp van de zoekmethode en sla de resultaten op.
  • Blader door de zoekresultaten:
    • Haal elk gevonden document op met behulp van de GetFoundDocument-methode.
    • Haal eventuele bestandsinformatie voor het gevonden document op of druk deze 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 C#

// Een index maken en documenten indexeren vanuit de opgegeven map
Index index = new Index("path/for/indexingFolder");
index.Add("path/parent-folder/");

// Zoek naar documenten die het woord 'water' of 'non' of de zinsnede 'Lorem ipsum' bevatten
string query = "water OR \"Lorem ipsum\" OR non";
SearchResult result = index.Search(query);

// Het resultaat afdrukken
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Total occurrences: " + result.OccurrenceCount);
for (int i = 0; i < result.DocumentCount; i++)
{
    FoundDocument document = result.GetFoundDocument(i);

    // Markeer de zoekresultaten
    OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, "/path/Highlighted-" + i + ".html");
    Highlighter highlighter = new DocumentHighlighter(outputAdapter);
    index.Highlight(document, highlighter); // Generating HTML formatted text with highlighted occurrences
}

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

Gemarkeerde tekstzoekresultaten in HTML-indeling

De tekstzoekresultaten afdrukken

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

// Het resultaat afdrukken
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Total occurrences: " + result.OccurrenceCount);
for (int i = 0; i < result.DocumentCount; i++)
{
    FoundDocument document = result.GetFoundDocument(i);

    Console.WriteLine("Document: " + document.DocumentInfo.FilePath);
    Console.WriteLine("Occurrences: " + document.OccurrenceCount);
    for (int j = 0; j < document.FoundFields.Length; j++)
    {
        FoundDocumentField field = document.FoundFields[j];
        Console.WriteLine("\tField: " + field.FieldName);
        Console.WriteLine("\tOccurrences: " + document.OccurrenceCount);

        // Gevonden termen afdrukken
        if (field.Terms != null)
        {
            for (int k = 0; k < field.Terms.Length; k++)
            {
                Console.WriteLine("\t\t" + field.Terms[k].PadRight(20) + field.TermsOccurrences[k]);
            }
        }
        // Gevonden zinnen afdrukken
        if (field.TermSequences != null)
        {
            for (int k = 0; k < field.TermSequences.Length; k++)
            {
                string sequence = string.Join(" ", field.TermSequences[k]);
                Console.WriteLine("\t\t" + sequence.PadRight(30) + field.TermSequencesOccurrences[k]);
            }
        }
    }
}

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

Documents: 3
Total occurrences: 141
	Document: Lorem ipsum.docx
	Occurrences: 101
		Field: filename
		Occurrences: 101
			lorem ipsum		1
		Field: content
		Occurrences: 101
			non			94
			lorem ipsum		6
	Document: Lorem ipsum.pdf
	Occurrences: 1
		Field: filename
		Occurrences: 1
			lorem ipsum		1
	Document: English.txt
	Occurrences: 39
		Field: content
		Occurrences: 39
			water			39

Volledige code

Hier is de volledige C#-code die gezamenlijk de tekstreeksen en -zinnen in meerdere bestanden en mappen doorzoekt:

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

// Een index maken en documenten indexeren vanuit de opgegeven map
Index index = new Index("path/for/indexingFolder");
index.Add("path/parent-folder/");

// Zoek naar documenten die het woord 'water' of 'non' of de zinsnede 'Lorem ipsum' bevatten
string query = "water OR \"Lorem ipsum\" OR non";
SearchResult result = index.Search(query);

// Het resultaat afdrukken
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Total occurrences: " + result.OccurrenceCount);
for (int i = 0; i < result.DocumentCount; i++)
{
    FoundDocument document = result.GetFoundDocument(i);

    // Markeer de zoekresultaten
    OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, "/path/Highlighted-" + i + ".html");
    Highlighter highlighter = new DocumentHighlighter(outputAdapter);
    index.Highlight(document, highlighter); // Generating HTML formatted text with highlighted occurrences

    Console.WriteLine("Document: " + document.DocumentInfo.FilePath);
    Console.WriteLine("Occurrences: " + document.OccurrenceCount);
    for (int j = 0; j < document.FoundFields.Length; j++)
    {
        FoundDocumentField field = document.FoundFields[j];
        Console.WriteLine("\tField: " + field.FieldName);
        Console.WriteLine("\tOccurrences: " + document.OccurrenceCount);

        // Gevonden termen afdrukken
        if (field.Terms != null)
        {
            for (int k = 0; k < field.Terms.Length; k++)
            {
                Console.WriteLine("\t\t" + field.Terms[k].PadRight(20) + field.TermsOccurrences[k]);
            }
        }
        // Gevonden zinnen afdrukken
        if (field.TermSequences != null)
        {
            for (int k = 0; k < field.TermSequences.Length; k++)
            {
                string sequence = string.Join(" ", field.TermSequences[k]);
                Console.WriteLine("\t\t" + sequence.PadRight(30) + field.TermSequencesOccurrences[k]);
            }
        }
    }
}

Een gratis licentie of een gratis proefversie verkrijgen

Gratis vergunning

Verkrijg een tijdelijke gratis licentie om deze bibliotheek zonder beperkingen te verkennen.

Gratis proefperiode

U kunt de gratis proefversie downloaden via de downloadsectie.

.NET API voor zoeken in bestanden en mappen

Conclusie

In dit artikel hebben we tekstscannen onderzocht voor het doorzoeken van verschillende teksten in talloze bestanden in verschillende mappen met behulp van C#. Beginnend met de zoekopdracht, hebben we meerdere bestanden en mappen verkend, waarbij we de gezochte woorden of zinsneden in de respectieve HTML-bestanden hebben gemarkeerd.

Voor uitgebreide details over de API wordt aangeraden de documentatie te raadplegen.

Eventuele vragen of aanvullende discussies kunnen worden gericht aan het beschikbare forum.

Zie ook