Přemýšleli jste někdy o tom, jak snadno prohledávat velké množství souborů nebo jak se orientovat při hledání v souborech v různých složkách? Tento článek obsahuje odpovědi, které hledáte. Pojďme se ponořit do světa textového vyhledávání a prozkoumat, jak pomocí C# hledat různé texty nebo fráze v různých souborech v různých složkách.

C# API pro skenování textu napříč soubory a složkami

Nyní využijeme GroupDocs.Search for .NET API k prozkoumání mnoha textů v souborech různých formátů napříč složkami. Tato knihovna nám umožňuje systematicky skenovat text v široké škále formátů souborů, jako jsou dokumenty Word, tabulky, prezentace, soubory PDF, soubory značek, elektronické knihy, e-mailové zprávy, dokumenty One Note a archivy ZIP. Podrobný seznam podporovaných formátů souborů naleznete v komplexní dokumentaci.

Máte možnost buď stáhnout DLL nebo MSI instalační program z části ke stažení, nebo můžete nainstalovat API do své aplikace .NET pomocí NuGet.

PM> Install-Package GroupDocs.Search

Vyhledávání více textů v souborech napříč složkami pomocí C#

Chcete-li provést textové vyhledávání ve více souborech ve více složkách pomocí C# a vygenerovat zvýrazněné výstupní soubory HTML pro každý nalezený dokument, postupujte podle těchto kroků.

  • Vytvořte objekt Index se zadanou cestou složky indexu.
  • Indexujte nadřazenou složku dokumentů pomocí metody Add.
  • Definujte vyhledávací dotaz s více termíny nebo frázemi.
  • Proveďte skenování textu pomocí metody Hledat a uložte výsledky.
  • Iterujte výsledky vyhledávání:
    • Získejte každý nalezený dokument pomocí metody GetFoundDocument.
    • Načtěte nebo vytiskněte jakékoli informace o souboru pro nalezený dokument.
    • Nastavte OutputAdapter pro požadovaný formát a cestu.
    • Vytvořte Zvýrazňovač pro dokument.
    • Zvýrazněte a vytiskněte výsledky hledání do souboru HTML pomocí metody Zvýraznění.
// Hledání textu ve více souborech různých formátů souborů v rámci více složek pomocí C#

// Vytvoření rejstříku a indexování dokumentů ze zadané složky
Index index = new Index("path/for/indexingFolder");
index.Add("path/parent-folder/");

// Vyhledejte dokumenty obsahující slovo „voda“ nebo „ne“ nebo frázi „Lorem ipsum“
string query = "water OR \"Lorem ipsum\" OR non";
SearchResult result = index.Search(query);

// Tisk výsledku
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Total occurrences: " + result.OccurrenceCount);
for (int i = 0; i < result.DocumentCount; i++)
{
    FoundDocument document = result.GetFoundDocument(i);

    // Zvýrazněte výsledky vyhledávání
    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
}

Výše uvedený kód vám umožňuje hledat konkrétní texty ve více souborech a vytvářet zvýrazněné výstupní soubory HTML pro každý nalezený dokument.

Zvýrazněné výsledky hledání textu ve formátu HTML

Tisk výsledků hledání textu

Z výsledku vyhledávacího dotazu můžete dále extrahovat informace o nalezených dokumentech.

// Tisk výsledku
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);

        // Tisk nalezených termínů
        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]);
            }
        }
        // Tisk nalezených frází
        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]);
            }
        }
    }
}

Následující výstup bude výstupem tisku výše uvedených výsledků vyhledávání získaných ze souborů DOCX, PDF a 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

Kompletní kód

Zde je úplný kód C#, který společně prohledává textové řetězce a fráze ve více souborech a složkách:

// Hledání textu ve více souborech různých formátů souborů v rámci více složek pomocí C#

// Vytvoření rejstříku a indexování dokumentů ze zadané složky
Index index = new Index("path/for/indexingFolder");
index.Add("path/parent-folder/");

// Vyhledejte dokumenty obsahující slovo „voda“ nebo „ne“ nebo frázi „Lorem ipsum“
string query = "water OR \"Lorem ipsum\" OR non";
SearchResult result = index.Search(query);

// Tisk výsledku
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Total occurrences: " + result.OccurrenceCount);
for (int i = 0; i < result.DocumentCount; i++)
{
    FoundDocument document = result.GetFoundDocument(i);

    // Zvýrazněte výsledky vyhledávání
    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);

        // Tisk nalezených termínů
        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]);
            }
        }
        // Tisk nalezených frází
        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]);
            }
        }
    }
}

Získání bezplatné licence nebo bezplatné zkušební verze

Bezplatná licence

Získejte dočasnou licenci zdarma k prozkoumání této knihovny bez omezení.

Zkušební verze zdarma

Můžete si stáhnout bezplatnou zkušební verzi v sekci ke stažení.

.NET API pro vyhledávání v souborech a složkách

Závěr

V tomto článku jsme zkoumali skenování textu pro vyhledávání různých textů v mnoha souborech v několika složkách pomocí C#. Počínaje vyhledávacím dotazem jsme prozkoumali více souborů a složek a zvýrazňovali hledaná slova nebo fráze v příslušných souborech HTML.

Úplné podrobnosti o rozhraní API čtenářům doporučujeme nahlédnout do dokumentace.

Jakékoli dotazy nebo další diskuse můžete směřovat na dostupné fórum.

Viz také