使用 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 中搜索一个文件夹的多个文件中的同音字。

  • 定义搜索词查询、索引文件夹和文件的容器文件夹。
  • 使用定义的索引文件夹创建 Index
  • 将文档的文件夹添加到索引中。
  • 定义 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 存储库中的可用示例。如有任何疑问,请通过 论坛 联系我们。

也可以看看