發音相同但含義或拼寫不同的詞是同音詞。而拼寫相同但含義或發音不同的詞是同形異義詞。同音異義詞既可以是同音異義詞,也可以是同形異義詞;或兩者。讓我們不要混淆和自動化它。在本文中,您將了解如何使用 C# 在多個文檔中搜索同音異義詞。

使用 GroupDocs 在文件中搜索同音字

下面將涵蓋以下主題:

用於在多個文件中搜索同音字的 .NET API

GroupDocs.Search 展示了 .NET API(GroupDocs.Search for .NET)允許在指定文件夾的多個文件中搜索單詞及其同音字。我們將在本文的示例中使用此 API。它可以搜索各種不同格式的內容。除了查找同音異義詞外,API 還支持許多其他方式來根據需要進行搜索。一些受支持的搜索技術如下:

  • 同義詞搜索
  • 短語搜索
  • 模糊搜索
  • 區分大小寫搜索
  • 正則表達式搜索
  • 通配符搜索

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

PM> Install-Package GroupDocs.Search

使用 C# 在多個文件中查找同音字

以下步驟指導我們如何使用 C# 在文件夾中的文件中搜索同音字(具有相似聲音/發音的單詞)。

  • 定義搜索查詢、索引文件夾和包含您的文件的文件夾。
  • 使用定義的索引文件夾創建 索引
  • 將文檔的文件夾添加到創建的索引中。
  • 定義 SearchOptions 並設置 [UseHomophoneSearch](https://apireference.groupdocs.com/search/net/groupdocs .search.options/searchoptions/properties/usehomophonesearch)為真。
  • 通過使用查詢和搜索選項調用 Search 方法來搜索所有同音字。
  • 使用檢索到的 SearchResult 屬性的摘要。

以下 C# 源代碼查找定義文件夾的所有文件中的所有同音異義詞。此外,您還可以管理同音字詞典

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

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

// 創建搜索選項對象
SearchOptions options = new SearchOptions()
{
    UseHomophoneSearch = true // Enabling Homophone Search
}; 

// 搜索“正確”一詞
// 除了“right”這個詞,“rite, wright, write, ...”這些詞也會被搜索
SearchResult result = index.Search(query, options);
Console.WriteLine("Query: " + query);
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Occurrences: " + result.OccurrenceCount);

上述代碼的輸出如下:

Query: **right**
Documents: 2
Occurrences: 17

獲取每個文檔中的所有同音字及其出現次數後,按照以下步驟呈現同音字搜索結果。

  • 遍歷前面檢索到的同音字搜索結果。
  • 使用 [GetFoundDocument()](https://apireference.groupdocs.com/search/ net/groupdocs.search.results/searchresult/methods/getfounddocument) 方法。
  • 根據需要使用每個 FoundDocument 的屬性。
  • 現在,遍歷FoundDocument的FoundFields得到[FoundDocumentField](https://apireference.groupdocs。 com/search/net/groupdocs.search.results/founddocumentfield)。
  • 最後,從每個 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: **right**
Documents: 2
Total occurrences: 17

Document: C:/documents/sample.docx
Occurrences: 11
    Field: content
    Occurrences: 11
        right             3
        rite               4
        wright           1
        write             3
Document: C:/documents/sample.txt
Occurrences: 6
    Field: content
    Occurrences: 6
        right             4
        write             2

使用 C# 搜索同音字並打印結果 - 完整代碼

下面的C#代碼總結了上述步驟,它首先根據查詢找到所有的同音字,然後在提供的文件夾中打印每個文檔中所有同音字的出現次數。

// 在多個文件和文件夾中搜索同音字,然後使用 C# 打印結果
string query = "right";
string indexFolder = @"path\indexFolder";
string documentsFolder = @"path\documentsFolder";

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

// 創建搜索選項對象
SearchOptions options = new SearchOptions()
{
    UseHomophoneSearch = true // Enabling Homophone Search
}; 

// 搜索“正確”一詞
// 除了“right”這個詞,“rite, wright, write, ...”這些詞也會被搜索
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 應用程序,使用 GroupDocs.Search for .NET 在多個文件中搜索同音異義詞。

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

也可以看看