Javaを使用したあいまい検索

あいまい検索は、データ内で完全に同じではなく、似たようなコンテンツを見つけるのに役立ちます。これは、ちょっとしたタイプミス、スペルミス、データの差異がある場合に非常に便利です。この記事では、Java を使用してあいまい検索を実行して、フォルダー内に散在するファイルを検索する方法について説明します。

ファジー検索のサンプル コンテンツを詳細に説明する例をいくつか示します。

  • 文書で「color」または「colour」のどちらのスペルが使用されているかがわからない場合があります。
  • 「John」を検索する場合、実際には「Jon」または「Jhon」と綴られる可能性があります。
  • 誰かが「USA」と入力しても「USA」を検索しようとする
  • 「間違い」を犯した場合、ああ、待ってください、それは実際には「間違い」です。

このようなコンテンツを見つけるためのソリューションは、あいまい検索です。

Javaあいまい検索ライブラリ

Java であいまい検索を行うには、GroupDocs.Search for Java API を使用します。 API は高い柔軟性を示し、カスタマイズ可能な程度のエラー許容度を提供します。この機能は、イギリス英語やアメリカ英語などの言語の違いやタイプミスに対処する場合に便利です。

このライブラリを使用すると、さまざまなファイル形式内であいまい検索を実行できます。サポートは、Word ドキュメント (DOC、DOCX)、スプレッドシート (XLS、XLSX)、プレゼンテーション (PPT、PPTX)、PDF、マークアップ言語 (HTML、XML)、マークダウン (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 コードは、検索結果を表示する 2 つの方法を提供します。

  • 近似的に一致するものをすべて強調表示します。
  • 結果を読みやすく分析可能な形式で印刷します。
// 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 の詳細については、ドキュメント を参照してください。

質問がある場合、またはさらに議論したい場合は、フォーラム にアクセスしてください。


関連項目