使用 C# .NET 進行模糊搜索
  • 您不知道文件中使用了什麼顏色或顏色拼字。
  • 正在搜尋“John”,但它可能被拼寫為“Jon”或“Jhon”。
  • 當使用者輸入“USA”時定位“USA”。
  • 您要查找的單字或短語可能有“錯誤”,哎呀,又是一個“錯誤”。

模糊搜索來了。模糊搜尋可讓您找到資料中的近似匹配而不是精確匹配,從而實現搜尋查詢的靈活性。這在存在拼字錯誤、拼字錯誤或資料變更的情況下特別有用。本文介紹如何使用 C# 以程式設計方式跨資料夾的多個文件執行模糊搜尋。

C# 模糊搜尋庫

對於模糊搜索,我們將利用 GroupDocs.Search for .NET API。這允許一定程度的拼字容忍,使其能夠有效地適應區域語言差異,例如英式英語和美式英語之間的差異。

該程式庫使我們能夠以程式設計方式搜尋各種文件格式的文本,例如Word 文件(DOC、DOCX)、電子表格(XLS、XLSX)、簡報(PPT、PPTX)、PDF 文件、標籤(HTML、XML) 、 Markdown (MD)、電子書(EPUB、CHM、FB2)、電子郵件(MSG、EML)、OneNote 文件和 ZIP 檔案。

若要了解您可以使用的所有文件類型,請查看文件

您可以選擇從 下載部分 取得 DLL 或 MSI 安裝程序,或使用 NuGet 將 API 新增至您的 .NET 程式。

讓我們使用 C# 在文件中進行模糊搜索

請依照下列步驟使用 C# 對資料夾內各種檔案格式的多個檔案執行模糊搜尋:

  • 透過提供資料夾路徑建立 索引
  • 將搜尋目錄的父資料夾路徑新增至已建立的索引。
  • 定義搜尋查詢。
  • 透過啟用該選項來啟動模糊搜尋。
  • 根據需要設定模糊演算法中的相似度。
  • 使用 Search 方法執行搜尋以獲得搜尋結果。
  • 現在,您可以迭代 SearchResults 以根據需要建立或列印輸出。

下面提到的 C# 程式碼中的模糊搜尋會在所有子資料夾中的所有檔案中尋找給定查詢的近似匹配項,且拼字容錯率為 20%。

// 使用 C# 模糊搜尋多個資料夾中的多個文件

// 建立索引資料夾並將文件的資料夾新增至其中
Index index = new Index("indexing-folder-path");
index.Add("path/parent-folder");

SearchOptions options = new SearchOptions();
options.FuzzySearch.Enabled = true; // Enabling the fuzzy search
options.FuzzySearch.FuzzyAlgorithm = new SimilarityLevel(0.8);

string query = "nulla"; // search approximate matches of the provided query  
SearchResult result = index.Search(query, options);

這裡,相似度設定為 0.8,即 80% 匹配,對應於 20% 容錯率。您可以透過調整程式碼中的相似性等級來調整容差等級。

下面是從上面的程式碼中可以獲得的模糊搜尋結果。它非常簡單,但是,本文後面也提供了列印程式碼。

Query: nulla
 Documents: 2
 Occurrences: 135

     Document: Lorem ipsum.docx
     Occurrences: 132
         Field: content
         Occurrences: 132
             nulla               98
             nullam              34

     Document: EnglishText.txt
     Occurrences: 3
         Field: content
         Occurrences: 3
             dull                1
             full                1
             fully               1

列印搜尋結果

以下 C# 程式碼提供了兩種顯示搜尋結果的方法。

  • 反白顯示所有近似匹配。
  • 以可讀且可分析的格式列印結果
// 使用 C# 反白並列印所有文件的搜尋結果
for (int i = 0; i < result.DocumentCount; i++)
{
    FoundDocument document = result.GetFoundDocument(i);

    OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, indexFolder + "/Highlight" + i + ".html");
    Highlighter highlighter = new DocumentHighlighter(outputAdapter); 
    index.Highlight(document, highlighter);

    Console.WriteLine("\tDocument: " + document.DocumentInfo.FilePath);
    Console.WriteLine("\tOccurrences: " + document.OccurrenceCount);
    for (int j = 0; j < document.FoundFields.Length; j++)
    {
        FoundDocumentField field = document.FoundFields[j];
        Console.WriteLine("\t\tField: " + field.FieldName);
        Console.WriteLine("\t\tOccurrences: " + document.OccurrenceCount);
        // 列印找到的術語
        if (field.Terms != null)
        {
            for (int k = 0; k < field.Terms.Length; k++)
            {
                Console.WriteLine("\t\t\t" + field.Terms[k].PadRight(20) + field.TermsOccurrences[k]);
            }
        }
    }
    Console.WriteLine("===========================================");
}

取得免費許可證或免費試用

免費許可證

免費取得臨時許可證,不受限制地探索該程式庫。

免費試用

您可以從下載部分下載免費試用版

用於在檔案和資料夾中搜尋的 .NET API

結論

在本文中,我們研究了 C# 程式方法來實現模糊搜尋的魔力,以找到所有近似匹配的單詞,但具有一定程度的容錯能力。此功能使模糊搜尋能夠有效地適應區域語言差異,例如英式英語和美式英語之間的語言差異、文字中的拼字錯誤、名稱差異和語音匹配。

有關 API 的全面詳細信息,建議讀者參考文檔

任何疑問或其他討論可以直接訪問論壇


也可以看看