大量のファイルを簡単に検索したり、異なるフォルダーにまたがるファイル内を検索するという課題を解決する方法を考えたことはありますか?この記事にはあなたが探している答えがあります。テキスト検索の世界に飛び込み、C# を使用してさまざまなフォルダーにまたがるさまざまなファイル内のさまざまなテキストやフレーズを検索する方法を探ってみましょう。

ファイルとフォルダー間でテキストをスキャンするための C# API

次に、GroupDocs.Search for .NET API を利用して、フォルダー全体のさまざまな形式のファイル内の多数のテキストを探索します。このライブラリを使用すると、Word 文書、スプレッドシート、プレゼンテーション、PDF ファイル、マークアップ ファイル、電子書籍、電子メール メッセージ、One Note 文書、ZIP アーカイブなど、幅広いファイル形式のテキストを体系的にスキャンできるようになります。サポートされているファイル形式の詳細なリストについては、総合ドキュメントを参照してください。

ダウンロード セクション から DLL または MSI インストーラーを取得するか、NuGet を使用して API を .NET アプリケーションにインストールするかを選択できます。

PM> Install-Package GroupDocs.Search

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

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

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

// インデックスの作成と指定したフォルダーからのドキュメントのインデックス作成
Index index = new Index("path/for/indexingFolder");
index.Add("path/parent-folder/");

// 「water」または「non」という単語、または「Lorem ipsum」という語句を含むドキュメントを検索します
string query = "water OR \"Lorem ipsum\" OR non";
SearchResult result = index.Search(query);

// 結果の印刷
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Total occurrences: " + result.OccurrenceCount);
for (int i = 0; i < result.DocumentCount; i++)
{
    FoundDocument document = result.GetFoundDocument(i);

    // 検索結果を強調表示する
    OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, "/path/Highlighted-" + i + ".html");
    Highlighter highlighter = new DocumentHighlighter(outputAdapter);
    index.Highlight(document, highlighter); // Generating HTML formatted text with highlighted occurrences
}

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

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

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

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

// 結果の印刷
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Total occurrences: " + result.OccurrenceCount);
for (int i = 0; i < result.DocumentCount; i++)
{
    FoundDocument document = result.GetFoundDocument(i);

    Console.WriteLine("Document: " + document.DocumentInfo.FilePath);
    Console.WriteLine("Occurrences: " + document.OccurrenceCount);
    for (int j = 0; j < document.FoundFields.Length; j++)
    {
        FoundDocumentField field = document.FoundFields[j];
        Console.WriteLine("\tField: " + field.FieldName);
        Console.WriteLine("\tOccurrences: " + document.OccurrenceCount);

        // 見つかった用語を印刷する
        if (field.Terms != null)
        {
            for (int k = 0; k < field.Terms.Length; k++)
            {
                Console.WriteLine("\t\t" + field.Terms[k].PadRight(20) + field.TermsOccurrences[k]);
            }
        }
        // 見つかったフレーズを印刷する
        if (field.TermSequences != null)
        {
            for (int k = 0; k < field.TermSequences.Length; k++)
            {
                string sequence = string.Join(" ", field.TermSequences[k]);
                Console.WriteLine("\t\t" + sequence.PadRight(30) + field.TermSequencesOccurrences[k]);
            }
        }
    }
}

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

Documents: 3
Total occurrences: 141
	Document: Lorem ipsum.docx
	Occurrences: 101
		Field: filename
		Occurrences: 101
			lorem ipsum		1
		Field: content
		Occurrences: 101
			non			94
			lorem ipsum		6
	Document: Lorem ipsum.pdf
	Occurrences: 1
		Field: filename
		Occurrences: 1
			lorem ipsum		1
	Document: English.txt
	Occurrences: 39
		Field: content
		Occurrences: 39
			water			39

完全なコード

以下は、複数のファイルとフォルダー内のテキスト文字列とフレーズをまとめて検索する完全な C# コードです。

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

// インデックスの作成と指定したフォルダーからのドキュメントのインデックス作成
Index index = new Index("path/for/indexingFolder");
index.Add("path/parent-folder/");

// 「water」または「non」という単語、または「Lorem ipsum」という語句を含むドキュメントを検索します
string query = "water OR \"Lorem ipsum\" OR non";
SearchResult result = index.Search(query);

// 結果の印刷
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Total occurrences: " + result.OccurrenceCount);
for (int i = 0; i < result.DocumentCount; i++)
{
    FoundDocument document = result.GetFoundDocument(i);

    // 検索結果を強調表示する
    OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, "/path/Highlighted-" + i + ".html");
    Highlighter highlighter = new DocumentHighlighter(outputAdapter);
    index.Highlight(document, highlighter); // Generating HTML formatted text with highlighted occurrences

    Console.WriteLine("Document: " + document.DocumentInfo.FilePath);
    Console.WriteLine("Occurrences: " + document.OccurrenceCount);
    for (int j = 0; j < document.FoundFields.Length; j++)
    {
        FoundDocumentField field = document.FoundFields[j];
        Console.WriteLine("\tField: " + field.FieldName);
        Console.WriteLine("\tOccurrences: " + document.OccurrenceCount);

        // 見つかった用語を印刷する
        if (field.Terms != null)
        {
            for (int k = 0; k < field.Terms.Length; k++)
            {
                Console.WriteLine("\t\t" + field.Terms[k].PadRight(20) + field.TermsOccurrences[k]);
            }
        }
        // 見つかったフレーズを印刷する
        if (field.TermSequences != null)
        {
            for (int k = 0; k < field.TermSequences.Length; k++)
            {
                string sequence = string.Join(" ", field.TermSequences[k]);
                Console.WriteLine("\t\t" + sequence.PadRight(30) + field.TermSequencesOccurrences[k]);
            }
        }
    }
}

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

無料ライセンス

このライブラリを制限なく探索するには、無料の一時ライセンスを取得してください。

無料トライアル

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

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

結論

この記事では、C# を使用して、複数のフォルダーにまたがる多数のファイル内のさまざまなテキストを検索するテキスト スキャンについて調査しました。検索クエリから始めて、複数のファイルとフォルダー内を探索し、それぞれの HTML ファイル内で検索された単語またはフレーズを強調表示しました。

API の包括的な詳細については、ドキュメント を参照することをお勧めします。

問い合わせや追加の議論は、利用可能なフォーラムに送信できます。

関連項目