Ti sei mai chiesto come eseguire facilmente una ricerca tra molti file o affrontare la sfida della ricerca all’interno di file in cartelle diverse? Questo articolo contiene le risposte che stai cercando. Immergiamoci nel mondo della ricerca testuale ed esploriamo come cercare vari testi o frasi in file diversi in cartelle diverse utilizzando C#.

API C# per la scansione di testo tra file e cartelle

Ora utilizzeremo l’API GroupDocs.Search for .NET per esplorare numerosi testi all’interno di file di formati diversi nelle cartelle. Questa libreria ci consente di scansionare sistematicamente il testo in una vasta gamma di formati di file, come documenti Word, fogli di calcolo, presentazioni, file PDF, file Markup, eBook, messaggi e-mail, documenti One Note e archivi ZIP. Per un elenco approfondito dei formati di file supportati, fare riferimento alla documentazione completa.

Hai la possibilità di acquisire le DLL o il programma di installazione MSI dalla sezione download oppure puoi installare l’API nell’applicazione .NET utilizzando NuGet.

PM> Install-Package GroupDocs.Search

Ricerca di più testi in file tra cartelle utilizzando C#

Segui questi passaggi per eseguire una ricerca di testo in più file all’interno di più cartelle utilizzando C# e generare file di output HTML evidenziati per ogni documento trovato.

  • Creare un oggetto Indice con il percorso della cartella indice specificato.
  • Indicizzare la cartella del documento principale utilizzando il metodo Aggiungi.
  • Definire una query di ricerca con più termini o frasi.
  • Esegui la scansione del testo utilizzando il metodo Cerca e memorizza i risultati.
  • Scorri i risultati della ricerca:
    • Recupera ogni documento trovato utilizzando il metodo GetFoundDocument.
    • Recupera o stampa qualsiasi informazione sul file per il documento trovato.
    • Configurare un OutputAdapter per il formato e il percorso desiderati.
    • Crea un Evidenziatore per il documento.
    • Evidenzia e genera i risultati della ricerca in un file HTML utilizzando il metodo Evidenzia.
// Ricerca di testo in più file di vari formati di file all'interno di più cartelle utilizzando C#

// Creazione di un indice e indicizzazione dei documenti dalla cartella specificata
Index index = new Index("path/for/indexingFolder");
index.Add("path/parent-folder/");

// Cerca documenti contenenti la parola 'acqua' o 'non' oppure la frase 'Lorem ipsum'
string query = "water OR \"Lorem ipsum\" OR non";
SearchResult result = index.Search(query);

// Stampa del risultato
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Total occurrences: " + result.OccurrenceCount);
for (int i = 0; i < result.DocumentCount; i++)
{
    FoundDocument document = result.GetFoundDocument(i);

    // Evidenzia i risultati della ricerca
    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
}

Il codice sopra ti consente di cercare testi particolari in più file e creare file di output HTML evidenziati per ogni documento trovato.

Risultati della ricerca di testo evidenziati in formato HTML

Stampa dei risultati della ricerca di testo

Dal risultato della query di ricerca è possibile estrarre ulteriori informazioni sui documenti trovati.

// Stampa del risultato
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);

        // Stampa dei termini trovati
        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]);
            }
        }
        // Stampa delle frasi trovate
        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]);
            }
        }
    }
}

Quello che segue sarà l’output della stampa dei risultati della ricerca sopra ottenuti dai file DOCX, PDF e TXT:

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

Codice completo

Ecco il codice C# completo che cerca collettivamente stringhe di testo e frasi in più file e cartelle:

// Ricerca di testo in più file di vari formati di file all'interno di più cartelle utilizzando C#

// Creazione di un indice e indicizzazione dei documenti dalla cartella specificata
Index index = new Index("path/for/indexingFolder");
index.Add("path/parent-folder/");

// Cerca documenti contenenti la parola 'acqua' o 'non' oppure la frase 'Lorem ipsum'
string query = "water OR \"Lorem ipsum\" OR non";
SearchResult result = index.Search(query);

// Stampa del risultato
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Total occurrences: " + result.OccurrenceCount);
for (int i = 0; i < result.DocumentCount; i++)
{
    FoundDocument document = result.GetFoundDocument(i);

    // Evidenzia i risultati della ricerca
    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);

        // Stampa dei termini trovati
        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]);
            }
        }
        // Stampa delle frasi trovate
        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]);
            }
        }
    }
}

Ottenere una licenza gratuita o una prova gratuita

Licenza gratuita

Ottieni una licenza temporanea gratuita 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 la scansione del testo per cercare vari testi in numerosi file in diverse cartelle utilizzando C#. Iniziando con la query di ricerca, abbiamo esplorato più file e cartelle, evidenziando le parole o le frasi cercate nei rispettivi file HTML.

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

Eventuali richieste o discussioni aggiuntive possono essere indirizzate al forum disponibile.

Guarda anche