在另一篇文章中,我们已经看到什么是同义词,以及如何获取任何单词的所有同义词。如何在不同的文档中找到这些同义词?本文将指导您如何使用 C# 在多个文件中搜索任何特定查询(单词) 的同义词。

下面将介绍以下主题:

.NET API 用于在多个文件中搜索同义词

GroupDocs.Search 提供.NET API,允许在指定文件夹的多个文件中搜索任何单词及其同义词。我将在本文的示例中使用这个 API。它允许您搜索大量文档格式。除了查找同义词外,GroupDocs.Search for .NET 还支持更多的搜索技术,包括:

  • 模糊搜索 *区分大小写的搜索
  • 同音字搜索
  • 正则表达式搜索
  • 外卡搜索

您可以从 下载部分 下载 DLLsMSI 安装程序,或通过 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”
// 除了单词“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”
// 除了单词“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 存储库中的示例。通过 论坛 联系我们进行任何查询。

也可以看看