您是否想知道如何輕鬆搜尋大量文件或應對跨不同資料夾的文件內搜尋的挑戰?這篇文章有您正在尋找的答案。讓我們深入了解文字搜尋的世界,探索如何使用 C# 在不同資料夾中的不同檔案中搜尋各種文字或短語。
用於跨文件和資料夾掃描文字的 C# API
現在,我們將利用 GroupDocs.Search for .NET API 跨資料夾探索不同格式的檔案中的大量文字。該庫使我們能夠系統地掃描各種文件格式的文本,例如 Word 文件、電子表格、簡報、PDF 文件、標記文件、電子書、電子郵件、One Note 文件和 ZIP 存檔。有關支援的文件格式的詳細列表,請參閱綜合文件。
您可以選擇從 下載部分 取得 DLL 或 MSI 安裝程序,也可以使用 NuGet 將 API 安裝到您的 .NET 應用程式中。
PM> Install-Package GroupDocs.Search
使用 C# 跨資料夾搜尋文件中的多個文本
請依照下列步驟使用 C# 在多個資料夾內的多個文件中執行文字搜索,並為每個找到的文件產生突出顯示的 HTML 輸出檔。
- 使用指定的索引資料夾路徑建立 Index 物件。
- 使用 Add 方法索引父文件資料夾。
- 使用多個術語或短語定義搜尋查詢。
- 使用搜尋方法執行文字掃描並儲存結果。
- 迭代搜尋結果:
- 使用 GetFoundDocument 方法檢索每個找到的文件。
- 檢索或列印找到的文件的任何文件資訊。
- 為所需的格式和路徑設定 OutputAdapter。
- 為文件建立一個螢光筆。
- 使用Highlight 方法突出顯示搜尋結果並將其輸出到HTML 檔案。
// 使用 C# 在多個資料夾中的各種文件格式的多個文件中進行文字搜索
// 建立索引並從指定資料夾索引文檔
Index index = new Index("path/for/indexingFolder");
index.Add("path/parent-folder/");
// 搜尋包含單字“water”或“non”或短語“Lorem ipsum”的文檔
string query = "water OR \"Lorem ipsum\" OR non";
SearchResult result = index.Search(query);
// 列印結果
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Total occurrences: " + result.OccurrenceCount);
for (int i = 0; i < result.DocumentCount; i++)
{
FoundDocument document = result.GetFoundDocument(i);
// 突出顯示搜尋結果
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
}
上面的程式碼使您能夠在多個文件中找到特定文本,並為每個找到的文件建立突出顯示的 HTML 輸出文件。
列印文字搜尋結果
從搜尋查詢的結果中,您可以進一步提取有關找到的文件的資訊。
// 列印結果
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);
// 列印找到的術語
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]);
}
}
// 列印找到的短語
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]);
}
}
}
}
以下是列印上述從 DOCX、PDF 和 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
完整程式碼
以下是完整的 C# 程式碼,用於集體搜尋多個檔案和資料夾中的文字字串和短語:
// 使用 C# 在多個資料夾中的各種文件格式的多個文件中進行文字搜索
// 建立索引並從指定資料夾索引文檔
Index index = new Index("path/for/indexingFolder");
index.Add("path/parent-folder/");
// 搜尋包含單字“water”或“non”或短語“Lorem ipsum”的文檔
string query = "water OR \"Lorem ipsum\" OR non";
SearchResult result = index.Search(query);
// 列印結果
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Total occurrences: " + result.OccurrenceCount);
for (int i = 0; i < result.DocumentCount; i++)
{
FoundDocument document = result.GetFoundDocument(i);
// 突出顯示搜尋結果
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);
// 列印找到的術語
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]);
}
}
// 列印找到的短語
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]);
}
}
}
}
取得免費許可證或免費試用
免費許可證
取得免費臨時許可證,不受限制地探索該庫。
免費試用
您可以從下載部分下載免費試用版。
結論
在本文中,我們研究了文字掃描,以便使用 C# 在多個資料夾中的大量文件中搜尋各種文字。從搜尋查詢開始,我們在多個文件和資料夾中進行探索,突出顯示相應 HTML 文件中的搜尋單字或短語。
有關 API 的全面詳細信息,建議讀者參考文檔。
任何詢問或其他討論都可以直接訪問可用的論壇。