別の記事では、同義語とは何か、および任意の単語のすべての同義語を取得する方法を見てきました。異なるドキュメント内でこれらの同義語を見つけるのはどうですか?この記事では、C#を使用して複数のファイルで特定のクエリ(単語) の同義語を検索する方法について説明します。

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

*.NETAPI-同義語検索

複数のファイルで同義語を検索するための.NETAPI

GroupDocs.Searchは、指定されたフォルダーの複数のファイル内の任意の単語とその同義語を検索できる.NETAPIを提供します。この記事の示されている例では、このAPIを使用します。 ドキュメント形式の大規模なリストを検索することができます。同義語の検索に加えて、GroupDocs.Search for .NETは、次のようないくつかの検索手法もサポートしています。

*あいまい検索 *大文字と小文字を区別する検索 *同音異義語検索 *正規表現検索 *ワイルドカード検索

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

PM> Install-Package GroupDocs.Search

C#を使用して複数のファイルで同義語を検索する

手順は、C#を使用してフォルダー内のファイル内の同義語(同様の意味を持つ単語) を検索する方法を示しています。

*検索クエリ、インデックスフォルダ、およびドキュメントのフォルダを定義します。

  • Indexクラスを使用して、定義されたインデックスフォルダでインデックスを作成します。 *ドキュメントのフォルダをインデックスに追加します。
  • SearchOptionsを作成し、UseSynonymSearchをtrueに設定します。 *IndexクラスのSearchメソッドを呼び出し、クエリと検索のオプションを渡します。 *要約を印刷するには、取得したSearchResultのプロパティを使用します。

ソースコードは、C#を使用してフォルダーのすべてのファイル内のすべての同義語を見つける方法を示しています

// C#を使用して複数のファイルとフォルダーの同義語を検索する
string query = "make";
string indexFolder = @"path\indexFolder";
string documentsFolder = @"path\documentsFolder";

// 指定したフォルダにインデックスを作成する
Index index = new Index(indexFolder);
index.Add(documentsFolder);

// 検索オプションオブジェクトの作成
SearchOptions options = new SearchOptions();
options.UseSynonymSearch = true; // Enabling Synonym Search

// 「make」という単語を検索します
// 「make」という単語に加えて、同義語「do、cause、get、...」も検索されます
SearchResult result = index.Search(query, options);
Console.WriteLine("Query: " + query);
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Occurrences: " + result.OccurrenceCount);
Query: **make**
Documents: 2
Occurrences: 22

次の手順では、各ドキュメントですべての同義語とその出現回数を取得した後、結果を詳細に印刷します。

*上記のコードを使用して取得された検索結果をトラバースします。

  • GetFoundDocumentメソッドを使用して、各FoundDocumentを取得します。 *各FoundDocumentのそれぞれのプロパティを出力します。 *各FoundDocument内のFoundFieldsをトラバースして、Found DocumentFieldを取得します。 *各FoundDocumentFieldから、各ドキュメント内での用語と出現回数を取得できます。

次のソースコードは、C#を使用して検索された各用語の出現回数とともに、同義語の検索結果を出力します。

// 同義語検索結果をC#で印刷する
Console.WriteLine("Query: " + query);
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Total occurrences: " + result.OccurrenceCount + "\n");
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]);
            }
        }
    }
}
Query: **make**
Documents: 2
Total occurrences: 22

Document: C:/documents/sample.docx
Occurrences: 6
    Field: content
    Occurrences: 6
        make             1
        get                 2
        cause            1
        do                  2
Document: C:/documents/sample.txt
Occurrences: 16
    Field: content
    Occurrences: 16
        get                  4
        cause             1
        do                  11

C#を使用して同義語を検索して結果を印刷する-完全なコード

これは、提供されたクエリに従って最初にすべての同義語を検索し、次にC#を使用してそのフォルダー内の各ドキュメント内のすべての同義語のすべての出現を出力する完全なソースコードです。

// 複数のファイルとフォルダーで同義語を検索し、C#を使用して結果を印刷します
string query = "make";
string indexFolder = @"path\indexFolder";
string documentsFolder = @"path\documentsFolder";

// 指定したフォルダにインデックスを作成する
Index index = new Index(indexFolder);
// 指定されたフォルダからのドキュメントのインデックス作成
index.Add(documentsFolder);

// 検索オプションオブジェクトの作成
SearchOptions options = new SearchOptions();
options.UseSynonymSearch = true; // Enabling synonym search

// 「make」という単語を検索します
// 「make」という単語に加えて、「do、cause、get、...」という単語も検索されます。
SearchResult result = index.Search(query, options);

// 結果を印刷する
Console.WriteLine("Query: " + query);
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Total occurrences: " + result.OccurrenceCount + "\n");
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]);
            }
        }
    }
}

結論

結論として、C#を使用して、指定したフォルダー内の複数のドキュメントで特定の単語とその同義語を見つける方法を学習しました。複数のファイル内の任意の単語とその同義語を検索するための独自の.NETアプリケーションの開発を試みることができます。

ドキュメントから.NETSearchAutomationAPIについて詳細をご覧ください。機能を体験するには、GitHubリポジトリの例をご覧ください。 フォーラムからお問い合わせください。

関連項目