发音相同但含义或拼写不同的单词是 同音字 。然而,拼写相同但含义或发音不同的单词是 同形异义词同音异义词 可以是同音异义词或同形异义词;或两者。让我们不要混淆和自动化它。在本文中,您将学习如何使用 C# 在多个文档中搜索同音字。

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

下面将介绍以下主题:

.NET API 用于在多个文件中搜索同音字

GroupDocs.Search 展示了 .NET API(GroupDocs.Search for .NET 允许在指定文件夹的多个文件中搜索单词及其同音字。我们将在本文的示例中使用此 API。它可以搜索各种不同格式的内容。除了查找同音字外,API 还支持根据需要进行许多其他搜索方式。一些支持的搜索技术如下:

  • 同义词搜索
  • 短语搜索
  • 模糊搜索
  • 区分大小写的搜索
  • 正则表达式搜索
  • 外卡搜索

您可以从 下载部分 下载 DLLsMSI 安装程序,或通过 NuGet 在您的 .NET 应用程序中安装 API 。

PM> Install-Package GroupDocs.Search

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

以下步骤指导我们如何使用 C# 在文件夹中的文件中搜索同音字(具有相似声音/发音的单词) 。

  • 定义搜索查询、索引文件夹和包含文件的文件夹。
  • 使用定义的索引文件夹创建索引
  • 将文档的文件夹添加到创建的索引中。
  • 定义 SearchOptions 并设置 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()) 将每个文档作为 FoundDocument 方法。
  • 根据需要使用每个 FoundDocument 的属性。
  • 现在,遍历FoundDocument的FoundFields得到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# 从指定文件夹的多个文档中查找单词及其同音字。您可以尝试使用 GroupDocs.Search for .NET 构建自己的 .NET 应用程序,以在多个文件中搜索同音字。

从文档中了解更多 关于 .NET 搜索自动化 API。要体验这些功能,您可以查看 GitHub 存储库中的可用示例。通过 论坛 联系我们进行任何查询。

也可以看看