詳細に入る前に、全文検索手法の概要を見てみましょう。全文検索は、基本的に、ドキュメントのコレクションに対してテキスト/クエリを検索するためのより高度な方法です。このアプローチは、用語のすべてのインスタンスをすばやく見つけ、テキストインデックスを使用して機能します。この記事では、C#を使用してドキュメント内のフルテキストをプログラムで検索する方法を学習します。

この後、ワープロドキュメント、スプレッドシート、プレゼンテーション、HTMLファイル、PDF電子書籍、電子メールメッセージ、ZIPアーカイブ、およびその他の多くのファイルのテキストを検索するためのさまざまな検索手法を実装できます。

全文検索の実装例の1つは、ワードプロセッサとテキストエディタです。ドキュメント内のどこにでもフレーズや単語を見つけるのに役立ちます。

全文検索

以下のトピックについて説明します。

テキスト検索用の.NETAPI

GroupDocs.Search for .NETは、全文検索を可能にするバックエンド検索APIであり、サードパーティのツールやソフトウェアに依存することなく、任意の.NETアプリケーションに統合できます。これにより、アプリケーションで多数のドキュメント形式を検索することができます。

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

PM> Install-Package GroupDocs.Search

C#を使用した全文検索

全文検索を実行または実装するには、主に2つのステップがあります。

  • インデックス作成
  • 検索を実行します

インデックス作成

同じまたは異なるファイル形式の何千ものドキュメントを即座に検索できるようにするには、インデックスを作成してこれらのドキュメントを追加する必要があります。

インデックスとは何ですか?

インデックスには、すべてのドキュメントのスキャンされたテキストが含まれています。したがって、検索操作(特定のクエリの検索) を実行する場合は、元のドキュメントのテキストではなく、インデックスのみが参照されます。

###インデックスの作成

インデックスは、メモリまたはディスクに作成できます。プログラムを終了した後、メモリに作成されたインデックスを保存することはできません。対照的に、ディスク上に作成されたインデックスは、機能を継続するために将来ロードされる可能性があります。次の例は、ディスク上にインデックスを作成する方法を示しています。

Index index = new Index("indexPath/FolderName/");

ドキュメントにインデックスが付けられると、インデックスは検索クエリを処理できるようになります。以下は、GroupDocs.Searchfor.NETを使用して実行できる検索手法の一部です。

  • 大文字と小文字を区別する検索
  • 正規表現検索
  • フレーズ検索
  • ファセット検索
  • 同義語検索
  • ワイルドカード検索

C#で検索を実行する

ユースケースから始めます。複数のドキュメント(Word、PDF、Excel、およびHTML) があり、それらに対して特定の検索クエリ(検索用語「ビデオ」) を実行したい場合。

フォルダ内の複数のドキュメントでテキスト検索を実行する方法は次のとおりです。

  • ソースドキュメントフォルダとインデックスフォルダを決定します。
  • クエリ文字列を準備します。
  • インデックスフォルダを使用してインデックスを作成します。
  • ソースドキュメントフォルダをインデックスに追加します。
  • SearchメソッドIndexクラスを使用して検索を実行します。
  • 各ドキュメントのプロパティの結果をトラバースして検索します。

次のソースコードは、提供されたフォルダーのすべてのドキュメントに対してC#を使用してテキスト検索を実行します。

// C#で提供されたフォルダーのすべてのドキュメントでクエリテキストを検索します
string indexFolder =  @"indexPath/GroupDocs/index/";
string documentsFolder = @"documentPath/GroupDocs/source/";
string query = "video";

// 指定したフォルダにインデックスを作成し、ドキュメントフォルダをインデックスに追加します
Index index = new Index(indexFolder);
index.Add(documentsFolder);

// インデックスで検索
SearchResult result = index.Search(query);
Console.WriteLine("Documents found: " + result.DocumentCount);

// 検索結果の各ドキュメントをトラバースします
foreach (FoundDocument document in result)
{
    Console.WriteLine("Document Path : " + document.DocumentInfo.FilePath);
    Console.WriteLine("Occurance : " + document.OccurrenceCount);
}

ドキュメントフォルダで利用可能なすべてのドキュメントで、ドキュメントパスと検索語の出現回数を取得します。これが視覚化するスクリーンショットです。

全文検索テキスト出力

C#でテキスト検索結果を強調表示する

同じテキスト検索を実行してみましょうが、今回はクエリに一致するすべての出現箇所を強調表示します。

次の手順は、テキスト検索結果を強調表示する方法を示しています。

  • クエリ文字列を準備します。
  • インデックスフォルダパスを使用してインデックスを作成します。
  • ソースドキュメントフォルダをインデックスに追加します。
  • 検索でドキュメントフォルダを検索してください。
  • 検索結果をトラバースしながら、蛍光ペンを作成します。
  • IndexクラスのHighlightメソッドを使用して、検索結果を強調表示します。

次のコードは、C#を使用して検索結果が強調表示されたHTML出力を生成します。

string indexFolder =    @"indexPath/GroupDocs/index/";
string documentFolder = @"documentPath/GroupDocs/source/";
string query = "draw";

// 指定したフォルダにインデックスを作成し、ドキュメントフォルダをインデックスに追加します
Index index = new Index(indexFolder);
index.Add(documentFolder);

// クエリの単語を検索する
SearchResult result = index.Search(query);

// テキスト内のすべての出現箇所を強調表示する
for (int i = 0; i < result.DocumentCount; i++)
{
    FoundDocument document = result.GetFoundDocument(i);
                    
    string path = indexFolder + "Highlighted-"+ i +".html";
    OutputAdapter outputAdapter = new FileOutputAdapter(path); 
    Highlighter highlighter = new HtmlHighlighter(outputAdapter); 
    index.Highlight(document, highlighter);
}

出力として、複数のHTMLファイルを取得します。各ファイルには、異なるドキュメント(excel.xlsx、source.docx、target.docxなど) のコンテンツが強調表示された検索語/単語とともに表示されます。以下に、DOCXファイルの強調表示されたHTML出力を示します。

コンテンツで全文検索結果を強調表示する

無料のAPIライセンスを取得する

評価の制限なしにAPIを使用するために、無料の一時ライセンスを取得できます。

結論

この記事では、C#を使用してフォルダー内の複数のドキュメント内のテキストを検索する方法を学びました。さらに、検索結果のテキストをHTML形式でプログラムで強調表示する方法についても説明しました。

ドキュメントを使用してAPIの詳細を学ぶことができます。 GitHubには、さらに多くの例があります。お問い合わせは、フォーラムまでお問い合わせください。

関連項目