C# .NET を使用したあいまい検索
  • 文書内でどの色や色のスペルが使用されているかわかりません。
  • 「John」を検索していますが、「Jon」または「Jhon」と綴られている可能性があります。
  • ユーザーが「USA」を入力すると、「USA」が検索されます。
  • あなたが探している単語やフレーズには「間違い」がある可能性があります。おっと、それはまた「間違い」です。

ここでファジー検索が登場します。あいまい検索を使用すると、データ内の完全一致ではなく近似一致を見つけることができるため、検索クエリを柔軟に行うことができます。これは、データにタイプミス、スペルミス、またはバリエーションがあるシナリオで特に役立ちます。この記事では、C# を使用してフォルダー間で複数のドキュメントのあいまい検索をプログラムで実行する方法を説明します。

C# あいまい検索ライブラリ

あいまい検索の場合、GroupDocs.Search for .NET API を利用します。これにより、スペルにある程度の許容範囲が与えられ、イギリス英語とアメリカ英語の間のような地域言語の違いに効果的に対応できるようになります。

このライブラリを使用すると、Word 文書 (DOC、DOCX)、スプレッドシート (XLS、XLSX)、プレゼンテーション (PPT、PPTX)、PDF ファイル、マークアップ (HTML、XML)、マークダウン (MD)、電子ブック (EPUB、CHM、FB2)、電子メール メッセージ (MSG、EML)、OneNote ドキュメント、および ZIP アーカイブ。

操作できるすべての種類のファイルを確認するには、ドキュメント を参照してください。

ダウンロード セクション から DLL または MSI インストーラーを入手するか、NuGet を使用して API を .NET プログラムに追加するかを選択できます。

C#を使ってファイルのあいまい検索をしてみよう

C# を使用してフォルダー内のさまざまなファイル形式の複数のファイルに対してあいまい検索を実行するには、次の手順に従います。

  • フォルダー パスを指定して インデックス を作成します。
  • 作成したインデックスに検索ディレクトリの親フォルダーのパスを追加します。
  • 検索クエリを定義します。
  • このオプションを有効にして、あいまい検索をアクティブにします。
  • 必要に応じて、ファジー アルゴリズムの類似性レベルを設定します。
  • Search メソッドを使用して検索を実行し、検索結果を取得します。
  • ここで、SearchResults を反復処理して、必要に応じて出力を作成または印刷できます。

以下の C# コードのあいまい検索では、スペルの 20% のエラーを許容して、すべてのサブ フォルダーのすべてのファイルで、指定されたクエリのおおよその一致が検索されます。

// C# を使用して複数のフォルダーにまたがる複数のファイルをあいまい検索する

// インデックスフォルダーを作成し、そこにドキュメントのフォルダーを追加する
Index index = new Index("indexing-folder-path");
index.Add("path/parent-folder");

SearchOptions options = new SearchOptions();
options.FuzzySearch.Enabled = true; // Enabling the fuzzy search
options.FuzzySearch.FuzzyAlgorithm = new SimilarityLevel(0.8);

string query = "nulla"; // search approximate matches of the provided query  
SearchResult result = index.Search(query, options);

ここでは、類似性レベルは 0.8、つまり 80% の一致に設定されており、これは 20% のエラー許容範囲に相当します。コード内の類似性レベルを微調整することで、許容レベルを調整できます。

以下は、上記のコードから取得できるあいまい検索結果です。これは非常に単純ですが、印刷コードもこの記事の後半で利用できます。

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

検索結果を印刷する

次の C# コードは、検索結果を表示する 2 つの方法を提供します。

  • 近似的に一致するものをすべて強調表示します。
  • 結果を読みやすく分析可能な形式で印刷します。
// C# を使用してすべてのドキュメントの検索結果を強調表示して印刷する
for (int i = 0; i < result.DocumentCount; i++)
{
    FoundDocument document = result.GetFoundDocument(i);

    OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, indexFolder + "/Highlight" + i + ".html");
    Highlighter highlighter = new DocumentHighlighter(outputAdapter); 
    index.Highlight(document, highlighter);

    Console.WriteLine("\tDocument: " + document.DocumentInfo.FilePath);
    Console.WriteLine("\tOccurrences: " + document.OccurrenceCount);
    for (int j = 0; j < document.FoundFields.Length; j++)
    {
        FoundDocumentField field = document.FoundFields[j];
        Console.WriteLine("\t\tField: " + field.FieldName);
        Console.WriteLine("\t\tOccurrences: " + document.OccurrenceCount);
        // 見つかった用語を印刷する
        if (field.Terms != null)
        {
            for (int k = 0; k < field.Terms.Length; k++)
            {
                Console.WriteLine("\t\t\t" + field.Terms[k].PadRight(20) + field.TermsOccurrences[k]);
            }
        }
    }
    Console.WriteLine("===========================================");
}

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

無料ライセンス

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

無料トライアル

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

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

結論

この記事では、ある程度のエラーを許容しながら、ほぼ一致するすべての単語を見つけるためのあいまい検索の魔法に対する C# プログラムによるアプローチを検討しました。この機能により、あいまい検索は、イギリス英語とアメリカ英語の間の言語の違い、テキストのタイプミス、名前のバリエーション、音声の一致などの地域言語の違いに効果的に対応できるようになります。

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

質問や追加の議論は フォーラム に送信してください。


関連項目