使用 Java 进行模糊搜索

模糊搜索可帮助您查找数据中相似但不完全相同的内容。当数据中存在少量拼写错误、拼写错误或变化时,它非常方便。本文主要介绍 Java 方法来执行模糊搜索以查找分散在文件夹中的文件。

下面举几个例子来详细说明模糊搜索示例内容:

  • 您可能不确定文档是否使用拼写“color”或“color”。
  • 当查找“John”时,它实际上可以拼写为“Jon”或“Jhon”。
  • 即使有人输入“USA”也试图找到“USA”
  • 如果你犯了一个“错误”,哦等等,这实际上是一个“错误”。

查找此类内容的解决方案是模糊搜索。

Java模糊搜索库

为了在 Java 中进行模糊搜索,我们将使用 GroupDocs.Search for Java API。该 API 具有很强的灵活性,并提供可定制的容错程度。在处理英式英语和美式英语等语言变体以及拼写错误时,此功能非常有用。

通过该库,可以在多种文件格式中执行模糊搜索。支持不仅限于 Word 文档(DOC、DOCX)、电子表格(XLS、XLSX)、演示文稿(PPT、PPTX)、PDF、标记语言(HTML、XML)、Markdown(MD)、电子书(EPUB、CHM、 FB2)、电子邮件(MSG、EML)、OneNote 笔记,甚至 ZIP 存档。

如果您想了解这个魔法可以处理的所有文件类型,只需查看文档

首先,您可以从 下载部分 获取 API,或者直接将 最新存储库和依赖项 Maven 配置 添加到您的 Java 应用程序中。

让我们使用 Java 在文件中进行模糊搜索

请按照以下步骤使用 Java 对文件夹内各种文件格式的多个文件执行模糊搜索:

  1. 首先使用文件所在的文件夹创建 索引
  2. 将主文件夹路径添加到索引中。
  3. 提供您要搜索的搜索查询。
  4. 打开模糊搜索的魔力,让它理解小错误。
  5. 设置模糊算法中的相似度。
  6. 使用search方法执行搜索,得到搜索结果。
  7. 现在,您可以遍历 SearchResults 以根据需要创建或打印输出。

在下面的 Java 代码中,程序会在所有文件和子文件夹中查找您所要求的类似内容。它可以容忍拼写错误,错误率高达 25%。如果您查看代码,您会发现相似度设置为 0.75,相当于 75% 的匹配度。如果您想微调搜索,只需更改代码中的相似度即可。

// 使用 Java 模糊搜索多个文件夹中的多个文件

// 创建索引文件夹并将文档的文件夹添加到其中
Index index = new Index("path/indexing-folder-path");
index.add("path/parent-folder");

SearchOptions options = new SearchOptions();
options.getFuzzySearch().setEnabled(true); // Enabling the fuzzy search
options.getFuzzySearch().setFuzzyAlgorithm(new SimilarityLevel(0.75));

String query = "nulla"; // search approximate matches of the provided query  
SearchResult result = index.search(query, options);

运行代码后,您将获得获取的模糊搜索结果的列表。如果您想了解如何打印搜索结果,请继续阅读本文。

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

打印搜索结果

以下 Java 代码提供了两种显示搜索结果的方法。

  • 突出显示所有近似匹配。
  • 以可读且可分析的格式打印结果
// 使用 Java 突出显示并打印所有文档的搜索结果
for (int i = 0 ; i < result.getDocumentCount(); i++)
{
    FoundDocument document = result.getFoundDocument(i);
  
    OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, "path/Highlight" + i + ".html");
    Highlighter highlighter = new DocumentHighlighter(outputAdapter);
    index.highlight(document, highlighter);
 
    System.out.println("\tDocument: " + document.getDocumentInfo().getFilePath());
    System.out.println("\tOccurrences: " + document.getOccurrenceCount());
    for (FoundDocumentField field : document.getFoundFields()) {
        System.out.println("\t\tField: " + field.getFieldName());
        System.out.println("\t\tOccurrences: " + field.getOccurrenceCount());

        // 打印找到的术语
        if (field.getTerms() != null) {
            for (int k = 0; k < field.getTerms().length; k++) {
                System.out.println("\t\t\t" + field.getTerms()[k] + " - " + field.getTermsOccurrences()[k]);
            }
        }
    }
}

获取免费许可证或免费试用

免费许可证

免费获取临时许可证,不受限制地探索该库。

免费试用

您可以从下载部分下载免费试用版

用于在文件和文件夹中搜索的 Java API

结论

在本文中,我们探索了执行模糊搜索的编程 Java 方法。它有助于找到相似的近似匹配词,即使存在小错误。此功能可以方便地处理英式英语和美式英语之间的差异、拼写错误、名称更改以及单词中的相似发音。

有关 API 的更多信息,请查看文档

如果您有疑问或想进行更多讨论,请前往论坛


也可以看看