Fuzzy Search met C# .NET
  • U weet niet welke kleur of kleurspelling in het document is gebruikt.
  • Zoekend naar “John”, maar het zou gespeld kunnen zijn als “Jon” of misschien “Jhon“.
  • ‘USA’ lokaliseren wanneer de gebruiker ‘USA’ invoert.
  • Het woord of de zin die je zoekt kan een “mistaek” bevatten, oeps, het is weer een “fout”.

Hier komt de Fuzzy Search. Met Fuzzy Search kunt u geschatte overeenkomsten vinden in plaats van exacte overeenkomsten in gegevens, waardoor flexibiliteit bij zoekopdrachten mogelijk wordt. Dit is met name handig in scenario’s met typefouten, spelfouten of variaties in de gegevens. In dit artikel wordt beschreven hoe u programmatisch een fuzzy-zoekopdracht uitvoert in meerdere documenten in mappen met behulp van C#.

C# Fuzzy Search-bibliotheek

Voor Fuzzy Search gebruiken we de GroupDocs.Search for .NET API. Dit zorgt voor een zekere mate van tolerantie in de spelling, waardoor het effectief is bij het accommoderen van regionale taalvariaties zoals die tussen Brits en Amerikaans Engels.

Deze bibliotheek stelt ons in staat om programmatisch tekst te doorzoeken in een breed scala aan bestandsformaten, zoals Word-documenten (DOC, DOCX), spreadsheets (XLS, XLSX), presentaties (PPT, PPTX), PDF-bestanden, markeringen (HTML, XML), Markdown (MD), eBooks (EPUB, CHM, FB2), e-mailberichten (MSG, EML), OneNote-documenten en ZIP-archieven.

Bekijk de documentatie om te zien met welke soorten bestanden je kunt werken.

U kunt ervoor kiezen om de DLL’s of het MSI-installatieprogramma op te halen uit de downloadsectie of de API toe te voegen aan uw .NET-programma met behulp van NuGet.

Laten we Fuzzy zoeken in bestanden met C#

Volg deze stappen om een fuzzy zoekopdracht uit te voeren in meerdere bestanden met verschillende bestandsformaten in mappen met behulp van C#:

  • Maak een Index door een mappad op te geven.
  • Voeg het pad van de bovenliggende map voor de zoekmap toe aan de gemaakte index.
  • Definieer de zoekopdracht.
  • Activeer Fuzzy Search door de optie in te schakelen.
  • Stel indien nodig het Gelijkenisniveau in het Fuzzy Algorithm in.
  • Voer de zoekopdracht uit met behulp van de zoekmethode om de zoekresultaten te verkrijgen.
  • Nu kunt u SearchResults herhalen om de uitvoer naar wens te maken of af te drukken.

De fuzzy zoekopdracht in de hieronder genoemde C#-code vindt de geschatte overeenkomsten van de gegeven zoekopdracht in alle bestanden in alle submappen met een fouttolerantie van 20% in de spelling.

// Fuzzy Zoek meerdere bestanden in meerdere mappen met C#

// Een indexmap maken en de map van het document eraan toevoegen
Index index = new Index("indexing-folder-path");
index.Add("path/parent-folder");

SearchOptions options = new SearchOptions();
options.FuzzySearch.Enabled = true; // Enabling the fuzzy search
options.FuzzySearch.FuzzyAlgorithm = new SimilarityLevel(0.8);

string query = "nulla"; // search approximate matches of the provided query  
SearchResult result = index.Search(query, options);

Hier is het niveau van overeenkomst ingesteld op 0,8, dat wil zeggen 80% overeenkomst, wat overeenkomt met een fouttolerantie van 20%. U kunt het tolerantieniveau aanpassen door het gelijkenisniveau in de code aan te passen.

Hieronder staan de vage zoekresultaten die u kunt verkrijgen met de bovenstaande code. Het is vrij eenvoudig, maar de printcode vindt u ook verderop in dit artikel.

Query: nulla
 Documents: 2
 Occurrences: 135

     Document: Lorem ipsum.docx
     Occurrences: 132
         Field: content
         Occurrences: 132
             nulla               98
             nullam              34

     Document: EnglishText.txt
     Occurrences: 3
         Field: content
         Occurrences: 3
             dull                1
             full                1
             fully               1

Zoekresultaten afdrukken

De volgende C#-code biedt twee manieren om uw zoekresultaten te presenteren.

  • Markeer alle geschatte overeenkomsten.
  • Druk de resultaten af in een leesbaar en analyseerbaar formaat
// Zoekresultaten voor alle documenten markeren en afdrukken met C#
for (int i = 0; i < result.DocumentCount; i++)
{
    FoundDocument document = result.GetFoundDocument(i);

    OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, indexFolder + "/Highlight" + i + ".html");
    Highlighter highlighter = new DocumentHighlighter(outputAdapter); 
    index.Highlight(document, highlighter);

    Console.WriteLine("\tDocument: " + document.DocumentInfo.FilePath);
    Console.WriteLine("\tOccurrences: " + document.OccurrenceCount);
    for (int j = 0; j < document.FoundFields.Length; j++)
    {
        FoundDocumentField field = document.FoundFields[j];
        Console.WriteLine("\t\tField: " + field.FieldName);
        Console.WriteLine("\t\tOccurrences: " + document.OccurrenceCount);
        // Gevonden termen afdrukken
        if (field.Terms != null)
        {
            for (int k = 0; k < field.Terms.Length; k++)
            {
                Console.WriteLine("\t\t\t" + field.Terms[k].PadRight(20) + field.TermsOccurrences[k]);
            }
        }
    }
    Console.WriteLine("===========================================");
}

Een gratis licentie of een gratis proefversie verkrijgen

Gratis vergunning

Verkrijg gratis een tijdelijke 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 gekeken naar de programmatische C#-benadering van de magie van Fuzzy-zoeken om alle overeenkomende woorden bij benadering te vinden, maar met een zekere mate van fouttolerantie. Deze functie maakt de fuzzy-zoekopdracht effectief bij het opvangen van regionale taalvariaties zoals die tussen Brits en Amerikaans Engels, typefouten in tekst, naamvariaties en fonetische matching.

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

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


Zie ook