在另一篇文章中,我們看到了什麼是同義詞,以及如何獲取任何單詞的所有同義詞。如何在不同的文檔中找到這些同義詞呢?本文將指導您如何使用 C# 在多個文件中搜索任何特定查詢(單詞)的同義詞。

下面將涵蓋以下主題:

用於在多個文件中搜索同義詞的 .NET API

GroupDocs.Search 提供了 .NET API,允許在指定文件夾的多個文件中搜索任何單詞及其同義詞。我將在本文所示示例中使用此 API。它允許您搜索大量文檔格式。除了查找同義詞,GroupDocs.Search for .NET 還支持更多搜索技術,包括:

  • 模糊搜索
  • 區分大小寫搜索
  • 同音字查詢
  • 正則表達式搜索
  • 通配符搜索

您可以從 下載部分 下載 DLL 或 MSI 安裝程序,或通過 NuGet 在您的 .NET 應用程序中安裝 API。

PM> Install-Package GroupDocs.Search

使用 C# 在多個文件中查找同義詞

這些步驟展示瞭如何使用 C# 在文件夾內的文件中搜索同義詞(具有相似含義的詞)。

  • 定義搜索查詢、索引文件夾和文檔的文件夾。
  • 使用 Index 類創建具有已定義索引文件夾的索引。
  • 將文檔的文件夾添加到索引中。
  • 創建 SearchOptions 並將 UseSynonymSearch 設置為 true。
  • 調用 Index 類的 Search 方法並傳遞查詢和搜索選項。
  • 要打印摘要,請使用檢索到的 SearchResult 的屬性。

源代碼顯示瞭如何使用 C# 在文件夾的所有文件中查找所有同義詞

// 使用 C# 在多個文件和文件夾中搜索同義詞
string query = "make";
string indexFolder = @"path\indexFolder";
string documentsFolder = @"path\documentsFolder";

// 在指定文件夾中創建索引
Index index = new Index(indexFolder);
index.Add(documentsFolder);

// 創建搜索選項對象
SearchOptions options = new SearchOptions();
options.UseSynonymSearch = true; // Enabling Synonym Search

// 搜索“製作”一詞
// 除了“make”這個詞,同義詞“do, cause, get, ...”也會被搜索
SearchResult result = index.Search(query, options);
Console.WriteLine("Query: " + query);
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Occurrences: " + result.OccurrenceCount);
Query: **make**
Documents: 2
Occurrences: 22

以下步驟在獲取每個文檔中的所有同義詞及其出現次數後詳細打印結果。

  • 遍歷使用上述代碼檢索到的搜索結果。
  • 使用 GetFoundDocument 方法獲取每個 FoundDocument
  • 打印每個 FoundDocument 的相應屬性。
  • 遍歷每個 FoundDocument 中的 FoundFields 得到 Found Document Field
  • 從每個 FoundDocumentField 中,您可以獲取其術語及其在每個文檔中的出現次數。

以下源代碼使用 C# 打印同義詞搜索結果以及每個搜索詞的出現次數。

// 在 C# 中打印同義詞搜索結果
Console.WriteLine("Query: " + query);
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Total occurrences: " + result.OccurrenceCount + "\n");
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]);
            }
        }
    }
}
Query: **make**
Documents: 2
Total occurrences: 22

Document: C:/documents/sample.docx
Occurrences: 6
    Field: content
    Occurrences: 6
        make             1
        get                 2
        cause            1
        do                  2
Document: C:/documents/sample.txt
Occurrences: 16
    Field: content
    Occurrences: 16
        get                  4
        cause             1
        do                  11

使用 C# 搜索同義詞和打印結果 - 完整代碼

這是完整的源代碼,它首先根據提供的查詢找到所有同義詞,然後使用 C# 打印該文件夾中每個文檔中所有同義詞的所有出現。

// 在多個文件和文件夾中搜索同義詞並使用 C# 打印結果
string query = "make";
string indexFolder = @"path\indexFolder";
string documentsFolder = @"path\documentsFolder";

// 在指定文件夾中創建索引
Index index = new Index(indexFolder);
// 索引指定文件夾中的文檔
index.Add(documentsFolder);

// 創建搜索選項對象
SearchOptions options = new SearchOptions();
options.UseSynonymSearch = true; // Enabling synonym search

// 搜索“製作”一詞
// 除了“make”這個詞,“do, cause, get, ...”也會被搜索
SearchResult result = index.Search(query, options);

// 打印結果
Console.WriteLine("Query: " + query);
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Total occurrences: " + result.OccurrenceCount + "\n");
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]);
            }
        }
    }
}

結論

總而言之,您已經學習瞭如何使用 C# 在指定文件夾內的多個文檔中查找特定單詞及其同義詞。您可以嘗試開發自己的 .NET 應用程序來搜索多個文件中的任何單詞及其同義詞。

從文檔中了解更多 關於 .NET 搜索自動化 API。要體驗這些功能,您可以查看 GitHub 存儲庫中的示例。通過 論壇 聯繫我們進行任何查詢。

也可以看看