Ricerca fuzzy utilizzando C# .NET
  • Non sai quale colore o ortografia del colore è stato utilizzato nel documento.
  • Sto cercando “John”, ma potrebbe essere stato scritto come “Jon” o forse “Jhon”.
  • Individuazione di “USA” quando l’utente inserisce “USA”.
  • La parola o la frase che stai cercando potrebbe contenere un “errore”, oops è ancora un “errore”.

Ecco che arriva la ricerca fuzzy. La ricerca fuzzy ti consente di trovare corrispondenze approssimative anziché corrispondenze esatte nei dati, consentendo flessibilità nelle query di ricerca. Ciò è particolarmente utile in scenari con errori di battitura, errori di ortografia o variazioni nei dati. Questo articolo illustra come eseguire a livello di codice una ricerca fuzzy in più documenti in cartelle utilizzando C#.

Libreria di ricerca fuzzy C#

Per la ricerca fuzzy utilizzeremo l’API GroupDocs.Search for .NET. Ciò consente un certo grado di tolleranza nell’ortografia, rendendolo efficace nell’accogliere le variazioni linguistiche regionali come quelle tra inglese britannico e americano.

Questa libreria ci consente di cercare a livello di codice testo in un’ampia gamma di formati di file, come documenti Word (DOC, DOCX), fogli di calcolo (XLS, XLSX), presentazioni (PPT, PPTX), file PDF, Markup (HTML, XML), Markdown (MD), eBook (EPUB, CHM, FB2), messaggi di posta elettronica (MSG, EML), documenti OneNote e archivi ZIP.

Per scoprire tutti i tipi di file con cui puoi lavorare, consulta la documentazione.

Puoi scegliere di ottenere le DLL o il programma di installazione MSI dalla sezione download o aggiungere l’API al tuo programma .NET utilizzando NuGet.

Eseguiamo la ricerca fuzzy nei file utilizzando C#

Seguire questi passaggi per eseguire una ricerca fuzzy in più file di vari formati di file all’interno delle cartelle utilizzando C#:

  • Crea un Indice fornendo un percorso di cartella.
  • Aggiungi il percorso della cartella principale per la directory di ricerca all’indice creato.
  • Definire la query di ricerca.
  • Attiva la ricerca fuzzy abilitando l’opzione.
  • Imposta il livello di somiglianza nell’algoritmo Fuzzy come richiesto.
  • Eseguire la ricerca utilizzando il metodo Cerca per ottenere i risultati della ricerca.
  • Ora puoi scorrere su SearchResults per creare o stampare l’output come preferisci.

La ricerca fuzzy nel codice C# indicato di seguito trova le corrispondenze approssimative della query specificata in tutti i file in tutte le sottocartelle con una tolleranza di errore del 20% nell’ortografia.

// Ricerca fuzzy di più file in più cartelle utilizzando C#

// Creare una cartella indice e aggiungervi la cartella del documento
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);

In questo caso il livello di somiglianza è impostato su 0,8, ovvero una corrispondenza dell'80% che corrisponde a una tolleranza di errore del 20%. È possibile regolare il livello di tolleranza modificando il livello di somiglianza nel codice.

Di seguito sono riportati i risultati della ricerca fuzzy che puoi ottenere dal codice precedente. È abbastanza semplice, tuttavia, il codice di stampa è disponibile anche più avanti in questo articolo.

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

Stampa dei risultati della ricerca

Il codice C# seguente fornisce due modi per presentare i risultati della ricerca.

  • Evidenzia tutte le corrispondenze approssimative.
  • Stampa i risultati in un formato leggibile e analizzabile
// Evidenzia e stampa i risultati della ricerca per tutti i documenti utilizzando 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);
        // Stampa dei termini trovati
        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("===========================================");
}

Ottenere una licenza gratuita o una prova gratuita

Licenza gratuita

Ottieni una licenza temporanea gratuitamente per esplorare questa libreria senza vincoli.

Prova gratuita

Puoi scaricare la versione di prova gratuita dalla sezione download.

API .NET per la ricerca all'interno di file e cartelle

Conclusione

In questo articolo abbiamo esaminato l’approccio programmatico di C# alla magia della ricerca Fuzzy per trovare tutte le parole corrispondenti approssimative ma con un certo grado di tolleranza agli errori. Questa funzionalità rende la ricerca fuzzy efficace nell’accogliere variazioni linguistiche regionali come quelle tra inglese britannico e americano, errori di battitura nel testo, variazioni di nomi e corrispondenze fonetiche.

Per dettagli completi sull’API, si consiglia ai lettori di fare riferimento alla documentazione.

Eventuali domande o discussioni aggiuntive possono essere indirizzate al forum.


Guarda anche