In un altro articolo, abbiamo visto che cosa sono i sinonimi e come ottenere tutti i sinonimi di qualsiasi parola. Che ne dici di trovare questi sinonimi all’interno di documenti diversi? Questo articolo ti guiderà su come cercare i sinonimi di una query (parola) specifica in più file usando C#.

Di seguito verranno trattati i seguenti argomenti:

API .NET per la ricerca di sinonimi in più file

GroupDocs.Search fornisce l’API .NET che consente la ricerca di qualsiasi parola e dei suoi sinonimi in più file della cartella specificata. Userò questa API negli esempi mostrati di questo articolo. Ti consente di cercare in un ampio elenco di formati di documenti. Oltre a trovare i sinonimi, GroupDocs.Search for .NET supporta anche altre tecniche di ricerca che includono:

  • Ricerca sfocata
  • Ricerca case-sensitive
  • Ricerca omofonica
  • Cerca espressioni regolari
  • Ricerca con caratteri jolly

Puoi scaricare le DLL o il programma di installazione MSI dalla sezione download o installare l’API nella tua applicazione .NET tramite NuGet.

PM> Install-Package GroupDocs.Search

Trova i sinonimi in più file usando C#

I passaggi mostrano come cercare sinonimi (parole con significati simili) nei file all’interno di una cartella usando C#.

  • Definisci la query di ricerca, la cartella dell’indice e la cartella del documento.
  • Crea un indice con una cartella indice definita usando la classe Indice.
  • Aggiungi la cartella del documento all’indice.
  • Crea SearchOptions e imposta UseSynonymSearch su true.
  • Chiama il metodo Search della classe Index e passa la query e le opzioni di ricerca.
  • Per stampare il riepilogo, utilizzare le proprietà del Risultato di ricerca recuperato.

Il codice sorgente mostra come trovare tutti i sinonimi all’interno di tutti i file di una cartella usando C#

// Cerca sinonimi in più file e cartelle usando C#
string query = "make";
string indexFolder = @"path\indexFolder";
string documentsFolder = @"path\documentsFolder";

// Creazione di un indice nella cartella specificata
Index index = new Index(indexFolder);
index.Add(documentsFolder);

// Creazione di un oggetto delle opzioni di ricerca
SearchOptions options = new SearchOptions();
options.UseSynonymSearch = true; // Enabling Synonym Search

// Cerca la parola "fare"
// Oltre alla parola "make", verranno ricercati anche i sinonimi "fare, cause, get, ..."
SearchResult result = index.Search(query, options);
Console.WriteLine("Query: " + query);
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Occurrences: " + result.OccurrenceCount);
Query: **make**
Documents: 2
Occurrences: 22

I seguenti passaggi stampano i risultati in dettaglio dopo aver ottenuto tutti i sinonimi e il loro numero di occorrenze in ogni documento.

  • Attraversa i risultati della ricerca che vengono recuperati utilizzando il codice sopra.
  • Ottieni ogni FoundDocument usando il metodo GetFoundDocument.
  • Stampa le rispettive proprietà di ogni FoundDocument.
  • Attraversa i FoundFields all’interno di ogni FoundDocument per ottenere Trovato campo del documento.
  • Da ogni FoundDocumentField, puoi ottenere i suoi termini e il conteggio delle sue occorrenze all’interno di ogni documento.

Il codice sorgente seguente stampa i risultati della ricerca dei sinonimi insieme al numero di occorrenze di ogni termine cercato usando C#.

// Stampa dei risultati della ricerca dei sinonimi in C#
Console.WriteLine("Query: " + query);
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Total occurrences: " + result.OccurrenceCount + "\n");
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);
        // Termini trovati in stampa
        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]);
            }
        }
    }
}
Query: **make**
Documents: 2
Total occurrences: 22

Document: C:/documents/sample.docx
Occurrences: 6
    Field: content
    Occurrences: 6
        make             1
        get                 2
        cause            1
        do                  2
Document: C:/documents/sample.txt
Occurrences: 16
    Field: content
    Occurrences: 16
        get                  4
        cause             1
        do                  11

Cerca sinonimi e risultati di stampa utilizzando C# - Codice completo

Ecco il codice sorgente completo che prima trova tutti i sinonimi in base alla query fornita, quindi stampa tutte le occorrenze di tutti i sinonimi in ogni documento all’interno di quella cartella usando C#.

// Cerca i sinonimi in più file e cartelle e stampa i risultati usando C#
string query = "make";
string indexFolder = @"path\indexFolder";
string documentsFolder = @"path\documentsFolder";

// Creazione di un indice nella cartella specificata
Index index = new Index(indexFolder);
// Indicizzazione di documenti dalla cartella specificata
index.Add(documentsFolder);

// Creazione di un oggetto delle opzioni di ricerca
SearchOptions options = new SearchOptions();
options.UseSynonymSearch = true; // Enabling synonym search

// Cerca la parola "fare"
// Oltre alla parola "make", verranno cercate anche le parole "do, cause, get, ..."
SearchResult result = index.Search(query, options);

// Stampa del risultato
Console.WriteLine("Query: " + query);
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Total occurrences: " + result.OccurrenceCount + "\n");
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);
        // Termini trovati in stampa
        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]);
            }
        }
    }
}

Conclusione

Per concludere, hai imparato come trovare le parole specifiche e anche i loro sinonimi in più documenti all’interno della cartella specificata usando C#. Puoi provare a sviluppare la tua applicazione .NET per la ricerca di qualsiasi parola e dei suoi sinonimi all’interno di più file.

Ulteriori informazioni sull’API .NET Search Automation dalla documentazione. Per provare le funzionalità, puoi dare un’occhiata agli esempi nel repository GitHub. Contattaci per qualsiasi domanda tramite il forum.

Guarda anche