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.
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.
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.