Laten we, voordat we in details treden, een overzicht krijgen van de full-text zoektechniek. Zoeken in volledige tekst is in feite een geavanceerdere manier om een tekst/query te doorzoeken in een verzameling documenten. Deze aanpak vindt snel alle instanties van een term en werkt door tekstindexen te gebruiken. In dit artikel leren we hoe we programmatisch de volledige tekst in documenten kunnen doorzoeken met behulp van C#.
Hierna kunt u verschillende zoektechnieken implementeren om tekst te doorzoeken in tekstverwerkingsdocumenten, spreadsheets, presentaties, HTML-bestanden, PDF-eBooks, e-mailberichten, ZIP-archieven en vele andere bestanden.
Een van de voorbeelden van implementatie van full-text zoeken is in tekstverwerkers en teksteditors. Het helpt u om overal in het document een zin of woord te vinden.
De volgende onderwerpen komen hieronder aan bod:
- .NET API voor zoeken in volledige tekst
- Zoek volledige text
- Zoekopdracht uitvoeren in C#
- Markeer zoekresultaten
.NET API voor tekstzoeken
GroupDocs.Search for .NET is een back-end-zoek-API die full-text zoeken mogelijk maakt en kan worden geïntegreerd in elke .NET-toepassing zonder enige tool van derden of softwareafhankelijkheid. Hiermee kunt u zoeken in een groot aantal documentindelingen in uw toepassingen.
U kunt de DLL’s of het MSI-installatieprogramma downloaden van de downloadsectie of de API in uw .NET-toepassing installeren via NuGet.
PM> Install-Package GroupDocs.Search
Zoeken in volledige tekst met C#
Er zijn twee hoofdstappen om een volledige tekstzoekopdracht uit te voeren of te implementeren.
- Indexeren
- Zoekopdracht uitvoeren
Indexeren
Om het mogelijk te maken om direct duizenden documenten met dezelfde of verschillende bestandsindelingen te doorzoeken, moet u een index maken en deze documenten eraan toevoegen.
Wat is een index?
Een index bevat gescande tekst van alle documenten. Wanneer u een zoekopdracht gaat uitvoeren (een specifieke zoekopdracht doorzoeken), wordt daarom alleen naar de index verwezen in plaats van naar de tekst van de originele documenten.
Aanmaken van indexen
Een index kan in het geheugen of op een schijf worden gemaakt. De index die in het geheugen is gemaakt, kan niet worden opgeslagen nadat u uw programma hebt afgesloten. Een index die op de schijf is gemaakt, kan daarentegen in de toekomst worden geladen om verder te werken. Het volgende voorbeeld laat zien hoe u een index op een schijf maakt.
Index index = new Index("indexPath/FolderName/");
Wanneer documenten zijn geïndexeerd, is de index klaar om de zoekopdrachten te verwerken. Hieronder volgen enkele zoektechnieken die kunnen worden uitgevoerd met GroupDocs.Search for .NET:
- Hoofdlettergevoelig zoeken
- Zoeken naar reguliere expressies
- Zin zoeken
- Gefacetteerd zoeken
- Synoniem zoeken
- Wildcard zoeken
Zoekopdracht uitvoeren in C#
Beginnend met een use-case. Als we meerdere documenten hebben (Word, PDF, Excel en HTML) en we willen er een specifieke zoekopdracht (zoekterm “video”) op uitvoeren.
Hieronder volgen de stappen voor het uitvoeren van tekstzoekopdrachten op meerdere documenten in een map:
- Bepaal de map met brondocumenten en de indexmap.
- Bereid de queryreeks voor.
- Maak Index met behulp van de indexmap.
- Voeg de map met brondocumenten toe aan de index.
- Voer een zoekopdracht uit met behulp van de Search-methode Index-klasse.
- Doorkruis en zoekresultaten voor de eigenschappen van elk document.
De volgende broncode voert een tekstzoekopdracht uit met behulp van C# op alle documenten van de verstrekte map.
// Zoek Querytekst in alle documenten van de opgegeven map in C#
string indexFolder = @"indexPath/GroupDocs/index/";
string documentsFolder = @"documentPath/GroupDocs/source/";
string query = "video";
// Index maken in de opgegeven map en documentenmap toevoegen aan Index
Index index = new Index(indexFolder);
index.Add(documentsFolder);
// Zoeken in index
SearchResult result = index.Search(query);
Console.WriteLine("Documents found: " + result.DocumentCount);
// Doorloop elk document van het zoekresultaat
foreach (FoundDocument document in result)
{
Console.WriteLine("Document Path : " + document.DocumentInfo.FilePath);
Console.WriteLine("Occurance : " + document.OccurrenceCount);
}
We krijgen het documentpad en het aantal keren dat de zoekterm voorkomt in alle documenten die beschikbaar zijn in de documentenmap. Hier is de screenshot om te visualiseren.
Markeer tekstzoekresultaten in C#
Laten we nu dezelfde tekstzoekopdracht uitvoeren, maar deze keer markeren we alle instanties die overeenkomen met de zoekopdracht.
De volgende stappen laten zien hoe u de tekstzoekresultaten kunt markeren:
- Bereid de queryreeks voor.
- Maak Index met behulp van het indexmappad.
- Voeg de map met brondocumenten toe aan de index.
- Doorzoek de documentmap met de methode Zoeken.
- Maak de Markeerstift terwijl u door de zoekresultaten bladert.
- Gebruik de methode Highlight van de klasse Index om de zoekresultaten te markeren.
De volgende code genereert de HTML-uitvoer met gemarkeerde zoekresultaten met behulp van C#.
string indexFolder = @"indexPath/GroupDocs/index/";
string documentFolder = @"documentPath/GroupDocs/source/";
string query = "draw";
// Maak een index in de opgegeven map en voeg de documentenmap toe aan Index
Index index = new Index(indexFolder);
index.Add(documentFolder);
// Zoek het gevraagde woord op
SearchResult result = index.Search(query);
// Markeer alle gebeurtenissen in de tekst
for (int i = 0; i < result.DocumentCount; i++)
{
FoundDocument document = result.GetFoundDocument(i);
string path = indexFolder + "Highlighted-"+ i +".html";
OutputAdapter outputAdapter = new FileOutputAdapter(path);
Highlighter highlighter = new HtmlHighlighter(outputAdapter);
index.Highlight(document, highlighter);
}
Als uitvoer krijgen we meerdere HTML-bestanden. Elk bestand toont de inhoud van een ander document (bijv. excel.xlsx, source.docx, target.docx) met gemarkeerde zoekterm/woord. Hieronder vindt u de gemarkeerde HTML-uitvoer van een DOCX-bestand.
Ontvang een gratis API-licentie
U kunt een gratis tijdelijke licentie krijgen om de API te gebruiken zonder de evaluatiebeperkingen.
Conclusie
In dit artikel hebben we geleerd om tekst in meerdere documenten van een map te doorzoeken met behulp van C#. Verder hebben we besproken hoe u de tekst van zoekresultaten in HTML-indeling programmatisch kunt markeren.
Meer informatie over de API vindt u in documentatie. Veel meer voorbeelden zijn beschikbaar op GitHub. Neem voor vragen contact met ons op via het forum.