GroupDocs を使用してファイル内の同音異義語を検索

シノニムは似たような意味を持つ単語で、同音異義語は同じように聞こえますが、意味や綴りが異なります。 Java を使用して複数のドキュメントで同義語を見つけることを学びました。今日、この記事では、Java を使用して複数のドキュメント内で同音異義語を検索する方法について説明します。

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

同音異義語検索用 Java API

GroupDocs.Search は Java API GroupDocs.Search for Java を示しており、特定のフォルダーの複数のファイル内で任意の単語とその同音異義語を検索できます。 さまざまな形式のコンテンツを検索できます。同音異義語の検索に加えて、API は次のような他の多くの検索手法をサポートしています。

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

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

<repository>
	<id>GroupDocsJavaAPI</id>
	<name>GroupDocs Java API</name>
	<url>http://repository.groupdocs.com/repo/</url>
</repository>
<dependency>
        <groupId>com.groupdocs</groupId>
        <artifactId>groupdocs-search</artifactId>
        <version>21.8</version> 
</dependency>
PM> Install-Package GroupDocs.Search

Java で複数のファイル内の同音異義語を見つける

次の手順は、Java のフォルダーの複数のファイルで同音異義語を検索する方法を示しています。

  • 検索語クエリ、インデックス作成フォルダー、およびファイルのコンテナー フォルダーを定義します。
  • 定義したインデックス フォルダーで インデックス を作成します。
  • ドキュメントのフォルダーをインデックスに追加します。
  • SearchOptions を定義し、setUseHomophoneSearch メソッドを使用して同音異義語検索を有効にします。
  • 検索メソッドを使用して同音異義語検索を実行します。
  • 必要に応じて、取得した SearchResult のプロパティを使用します。

次の Java ソース コードは、定義されたフォルダーのファイル内のすべての同音異義語を検索します。さらに、同音異義語辞書を管理することもできます。

// Java を使用して複数のファイルとフォルダーで同音異義語を検索する
String indexFolder = "path/indexFolder";
String documentsFolder = "path/documentsFolder";
String query = "right";

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

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

// 「正しい」という単語を検索する
// 「right」という単語に加えて、同音異義語の「rite、write、wright、...」も検索されます。
SearchResult result = index.search(query, options);

System.out.println("Query: " + query);
System.out.println("Documents: " + result.getDocumentCount());
System.out.println("Word & Homophone Occurrences: " + result.getOccurrenceCount());

上記のコードの出力は次のとおりです。

Query: right
Documents: 2
Occurrences: 17

各ドキュメントから同音異義語とその出現箇所を取得した後、次の手順に従って同音異義語の検索結果を使用できます。

  • 検索結果をトラバースします。
  • getFoundDocument メソッドを使用して、各 FoundDocument を取得します。
  • 必要に応じて、各 FoundDocument のプロパティを使用します。
  • 次に、FoundDocumentField を取得して、FoundDocument のフィールドをトラバースします。
  • 後で、各 FoundDocumentField から、各ドキュメント内のすべての用語とその出現箇所を取得します。

次の Java コードの例では、同音異義語の検索結果を、検索された各用語の出現回数とともに出力します。

// Javaでの同音異義語検索結果の印刷
System.out.println("Query: " + query);
System.out.println("Documents: " + result.getDocumentCount());
System.out.println("Word & Homophone Occurrences: " + result.getOccurrenceCount());

// ドキュメントをトラバースする
for (int i = 0; i < result.getDocumentCount(); i++) {
    FoundDocument document = result.getFoundDocument(i);
    System.out.println("Document: " + document.getDocumentInfo().getFilePath());
    System.out.println("Occurrences: " + document.getOccurrenceCount());
  
  // 見つかったフィールドをトラバースする
  for (FoundDocumentField field : document.getFoundFields()) {
        System.out.println("\tField: " + field.getFieldName());
        System.out.println("\tOccurrences: " + document.getOccurrenceCount());
  
        // 見つかった用語の印刷
        if (field.getTerms() != null) {
            for (int k = 0; k < field.getTerms().length; k++) {
                System.out.println("\t\t" + field.getTerms()[k] + "\t - \t" + field.getTermsOccurrences()[k]);
            }
        }
    }
}

以下は、上記のコード例の出力です。

Query: right
Documents: 2
Total occurrences: 17

Document: C:/documents/sample.docx
Occurrences: 11
    Field: content
    Occurrences: 11
        right             3
        rite               4
        wright           1
        write             3
Document: C:/documents/sample.txt
Occurrences: 6
    Field: content
    Occurrences: 6
        right             4
        write             2

Java を使用した同音異義語の検索と結果の出力 - 完全なコード

次の Java コードは、上記の手順を組み合わせたものです。最初に、クエリに従って同音異義語を検索し、指定されたフォルダー内の各ドキュメントから同音異義語のすべての出現を出力します。

// Java を使用して複数のファイルとフォルダーで同音異義語を検索する
String indexFolder = "path/indexFolder";
String documentsFolder = "path/documentsFolder";
String query = "right";

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

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

// 「正しい」という単語を検索する
// 「right」という単語に加えて、同音異義語の「rite、write、wright、...」も検索されます。
SearchResult result = index.search(query, options);

System.out.println("Query: " + query);
System.out.println("Documents: " + result.getDocumentCount());
System.out.println("Word & Homophone Occurrences: " + result.getOccurrenceCount());

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

  for (FoundDocumentField field : document.getFoundFields()) {
        System.out.println("\tField: " + field.getFieldName());
        System.out.println("\tOccurrences: " + document.getOccurrenceCount());
  
        // 見つかった用語の印刷
        if (field.getTerms() != null) {
            for (int k = 0; k < field.getTerms().length; k++) {
                System.out.println("\t\t" + field.getTerms()[k] + "\t - \t" + field.getTermsOccurrences()[k]);
            }
        }
    }
}

結論

最後に、Java を使用して、指定したフォルダー内の複数のドキュメントから単語とその同音異義語を検索する方法を学習しました。 GroupDocs.Search for Java を使用して同音異義語を検索する独自の Java アプリケーションを開発してみてください。

Java Search Automation API について 詳細については、ドキュメントを参照してください。その機能を体験するには、GitHub リポジトリで利用可能なサンプルをご覧ください。 フォーラム からお問い合わせください。

関連項目