使用 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 的全面详细信息,建议读者参考文档

任何疑问或其他讨论可以直接访问论坛


也可以看看