多数のファイルをシームレスに検索する方法や、複数のフォルダーにまたがるファイル内検索の複雑さを回避する方法を考えたことはありますか?すべての質問の答えがここで見つかります。この記事では、テキスト スキャンの領域を詳しく掘り下げ、Java を使用してさまざまなフォルダーにまたがるさまざまなファイル内の複数のテキストや語句を検索する方法を紹介します。

ファイルおよびフォルダー間でテキストをスキャンするための Java API

今日は、GroupDocs.Search for Java API を使用して、フォルダー全体のさまざまなファイル形式のファイル内の複数のテキストを検索します。このライブラリを使用すると、Word 文書、スプレッドシート、プレゼンテーション、PDF ファイル、マークアップ ファイル、電子書籍、電子メール メッセージ、One Note 文書、ZIP アーカイブなどの幅広いファイル形式内のテキストをプログラムでスキャンできます。ドキュメントには、サポートされるファイル形式の詳細なリストが記載されています。

ダウンロード セクション から JAR ファイルをダウンロードすることも、Java アプリケーション内で 最新のリポジトリと依存関係の Maven 設定 を使用することもできます。

Java を使用してフォルダー間でファイル内の複数のテキストを検索する

Java を使用して複数のフォルダー内の複数のファイルでテキスト検索を実行し、見つかったドキュメントごとに強調表示された HTML 出力ファイルを生成するには、次の手順に従います。

  • 指定されたインデックス フォルダー パスで Index オブジェクトを作成します。
  • add メソッドを使用して、親ドキュメント フォルダーにインデックスを付けます。
  • 複数の用語または語句を含む検索クエリを定義します。
  • 検索メソッドを使用してテキスト スキャンを実行し、結果を保存します。
  • 検索結果を繰り返し処理します。
    • getFoundDocument メソッドを使用して、見つかった各ドキュメントにアクセスします。
    • 見つかったドキュメントのファイル情報にアクセスまたは印刷します。
    • 希望の形式とパスの OutputAdapter を設定します。
    • 文書のハイライターを作成します。
    • ハイライトメソッドを使用して、検索結果を強調表示して HTML ファイルに出力します。
// Javaを使用した複数フォルダ内のさまざまなファイル形式の複数ファイルのテキスト検索

// 指定したフォルダーにインデックスを作成する
Index index = new Index("path/for/indexingFolder");

// 指定したフォルダーからドキュメントのインデックスを作成する
index.add("path/parent-folder/");

String query = "water OR \"Lorem ipsum\" OR non";
SearchResult result = index.search(query);

for (int i = 0 ; i < result.getDocumentCount(); i++)
{
    FoundDocument document = result.getFoundDocument(i);
    System.out.println("====================================");
    System.out.println("File Name: " + document.getDocumentInfo().getFilePath());

    OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, "/path/Highlighted-" + i + ".html");
    Highlighter highlighter = new DocumentHighlighter(outputAdapter);
    index.highlight(document, highlighter);
}

上記のコードをまとめて使用すると、複数のファイル内の特定のテキストを検索し、見つかったドキュメントごとに強調表示された HTML 出力ファイルを生成できます。

HTML 形式の強調表示されたテキスト検索結果

テキスト検索結果を印刷する

検索クエリの結果から、見つかったドキュメントに関する情報をさらに抽出できます。

// 検索結果を印刷する ===

for (int i = 0 ; i < result.getDocumentCount(); i++)
{
    FoundDocument document = result.getFoundDocument(i);
 
    // 検索結果を印刷する ===========
    System.out.println("Occurrences: " + document.getOccurrenceCount());
    for (FoundDocumentField field : document.getFoundFields()) {
        System.out.println("\tField: " + field.getFieldName());
        System.out.println("\tOccurrences: " + field.getOccurrenceCount());

        // 見つかった用語を印刷する
        if (field.getTerms() != null) {
            for (int k = 0; k < field.getTerms().length; k++) {
                System.out.println("\t\t" + field.getTerms()[k] + " - " + field.getTermsOccurrences()[k]);
            }
        }
        // 見つかったフレーズを印刷する
        if (field.getTermSequences() != null) {
            for (int k = 0; k < field.getTermSequences().length; k++) {
                String[] terms = field.getTermSequences()[k];
                String sequence = "";
                for (String term : terms) {
                    sequence += term + " ";
                }
                System.out.println("\t\t" + sequence + " - " + field.getTermSequencesOccurrences()[k]);
            }
        }
    }
}

以下は、DOCX、PDF、および TXT ファイルから取得した上記の検索結果を印刷した出力になります。

File Name: Lorem ipsum.docx
Occurrences: 101
	Field: filename
	Occurrences: 1
		lorem ipsum  - 1
	Field: content
	Occurrences: 100
		non - 94
		lorem ipsum  - 6
====================================
File Name: Lorem ipsum.pdf
Occurrences: 60
	Field: filename
	Occurrences: 1
		lorem ipsum  - 1
	Field: content
	Occurrences: 59
		non - 53
		lorem ipsum  - 6
====================================
File Name: English.txt
Occurrences: 39
	Field: content
	Occurrences: 39
		water - 39

完全なコード

複数のファイルとフォルダー内のテキスト文字列と語句をまとめて検索する完全な Java コードを次に示します。

// Javaを使用した複数フォルダ内のさまざまなファイル形式の複数ファイルのテキスト検索

// 指定したフォルダーにインデックスを作成する
Index index = new Index("path/for/indexingFolder");

// 指定したフォルダーからドキュメントのインデックスを作成する
index.add("path/parent-folder/");

String query = "water OR \"Lorem ipsum\" OR non";
SearchResult result = index.search(query);

for (int i = 0 ; i < result.getDocumentCount(); i++)
{
    FoundDocument document = result.getFoundDocument(i);
    System.out.println("====================================");
    System.out.println("File Name: " + document.getDocumentInfo().getFilePath());

    OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, "/path/Highlighted-" + i + ".html");
    Highlighter highlighter = new DocumentHighlighter(outputAdapter);
    index.highlight(document, highlighter);
  
    // 検索結果の印刷 ===========
    System.out.println("Occurrences: " + document.getOccurrenceCount());
    for (FoundDocumentField field : document.getFoundFields()) {
        System.out.println("\tField: " + field.getFieldName());
        System.out.println("\tOccurrences: " + field.getOccurrenceCount());

        // 見つかった用語を印刷する
        if (field.getTerms() != null) {
            for (int k = 0; k < field.getTerms().length; k++) {
                System.out.println("\t\t" + field.getTerms()[k] + " - " + field.getTermsOccurrences()[k]);
            }
        }
        // 見つかったフレーズを印刷する
        if (field.getTermSequences() != null) {
            for (int k = 0; k < field.getTermSequences().length; k++) {
                String[] terms = field.getTermSequences()[k];
                String sequence = "";
                for (String term : terms) {
                    sequence += term + " ";
                }
                System.out.println("\t\t" + sequence + " - " + field.getTermSequencesOccurrences()[k]);
            }
        }
    }  
}

無料ライセンスまたは無料トライアルを取得する

無料ライセンス

このライブラリを制限なく探索するには、[無料で一時ライセンス] を取得できます6

無料トライアル

ダウンロードセクションから無料トライアルをダウンロード

ファイルとフォルダー内を検索するための Java API

結論

この記事では、Java を使用して複数のフォルダーにまたがる複数のファイル内の複数のテキストを検索するテキスト スキャンについて説明しました。検索クエリから始めて、複数のファイルとフォルダー内を検索し、それぞれの HTML ファイルで見つかった結果を強調表示しました。

API の詳細情報については、ドキュメント を参照することをお勧めします。質問やさらなる議論は、提供されている フォーラム に送信できます。

関連項目