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.
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í.
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.