使用 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 的更多信息,請查看文檔

如果您有疑問或想進行更多討論,請前往論壇


也可以看看