Недавно мы обсуждали, как получить все синонимы любого слова. Было бы замечательно, если бы мы могли найти эти синонимы во многих различных документах. В этой статье мы увидим, как искать любое слово и его синонимы в нескольких файлах с помощью Java.

Ниже перечислены темы, которые рассматриваются ниже:

Java API — поиск синонимов в нескольких файлах

GroupDocs.Search демонстрирует Java API ([GroupDocs.Search for Java][8]. Он позволяет искать слова и их синонимы в различных файлах указанной папки. Он поддерживает длинный список различных форматов файлов и различные методы поиска. Некоторые из этих функций упомянуты ниже, и вы можете использовать их в сочетании для достижения своей цели:

  • Логический поиск
  • Поиск с учетом регистра
  • Выделите результаты поиска
  • Поиск омофонов
  • Поиск по фразе
  • Поиск по регулярным выражениям
  • Поиск по кускам
  • Поиск синонимов

Загрузите или настройте

Вы можете загрузить файл JAR из [раздела загрузок][9] или просто получить последний репозиторий и конфигурации зависимостей для pox.xml ваших на основе maven приложений Java.

<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>

Найдите синонимы в нескольких файлах с помощью Java

Давайте быстро перейдем к поиску синонимов в файлах. Следующие шаги показывают, как искать синонимы (слова с похожим значением) в файлах в папке с помощью Java:

  • Определите индексную папку, папку документа и запрос (слово для поиска).
  • Создайте индекс, используя определенную папку индекса, используя класс [Index][10].
  • Добавить папку документов в файл index.
  • Включите поиск синонимов с помощью [SearchOptions][11].
  • Вызовите метод [search][12] класса Index и передайте запрос с параметрами поиска.
  • Распечатайте сводку, используя свойства восстановленного класса [SearchResult][13].

В следующем исходном коде показано, как найти все синонимы в файлах с помощью Java:

// Поиск синонимов в нескольких файлах и папках с использованием Java
String indexFolder = "path/indexFolder";
String documentsFolder = "path/documentsFolder";
String query = "make";

// Создание индекса в указанной папке
Index index = new Index(indexFolder);
index.add(documentsFolder);

// Создание объекта параметров поиска
SearchOptions options = new SearchOptions();
options.setUseSynonymSearch(true); // Enable Synonym Search

// Найдите слово «сделать»
// Помимо слова «сделать», также будут искаться синонимы «делать, получать, иметь,…».
SearchResult result = index.search(query, options);

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

Ниже приведен вывод приведенного выше кода:

Query: **make**
Documents: 3
Word & Synonym Occurrences: 44 

Из результатов поиска, полученных на предыдущем шаге, вы можете получить информацию о каждом слове и синониме поиска. Следующие шаги подробно представляют результаты после получения всех синонимов и их количества вхождений в каждом документе:

  • Во-первых, выполните поиск, чтобы получить [SearchResult][14].
  • Просмотрите результаты поиска, чтобы работать с каждым [FoundDocument][15].
  • Печать соответствующих свойств каждого FoundDocument.
  • Теперь извлеките и просмотрите [FoundDocumentField][16] внутри каждого FoundDocument.
  • Каждое FoundDocumentField имеет свои термины, вхождения и другие свойства. Используйте соответствующий геттер.

Следующий исходный код отображает результат поиска синонимов вместе с количеством вхождений каждого искомого термина в Java.

// Печать результатов поиска синонимов в Java
System.out.println("Query: " + query);
System.out.println("Documents: " + result.getDocumentCount());
System.out.println("Word & Synonym 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: **make**
Documents: 2
Total occurrences: 22

Document: C:/documents/sample.docx
Occurrences: 13
    Field: content
    Occurrences: 13
        **make**  -  2
        **have**  -  1
        **get**  -  2
        **do**  -  8
- - - - - - - - - - - - - - - - 
Document: C:/documents/sample.txt
Occurrences: 11
    Field: content
    Occurrences: 11
        **make**  -  1
        **have**  -  2
        **get**  -  1
        **do**  -  7
- - - - - - - - - - - - - - - - 
Document: C:/documents/sample.pdf
Occurrences: 20
    Field: content
    Occurrences: 20
        **make**  -  2
        **have**  -  2
        **get**  -  2
        **do**  -  14 

Поиск синонимов и печать результатов в Java — полный код

Давайте объединим два вышеуказанных шага, так что вот полный исходный код. Во-первых, он находит все синонимы по заданному запросу. Затем он печатает все вхождения каждого синонима в каждом документе на Java.

// Поиск синонимов в нескольких файлах и папках с использованием Java
String indexFolder = "path/indexFolder";
String documentsFolder = "path/documentsFolder";
String query = "make";

// Создание индекса в указанной папке
Index index = new Index(indexFolder);
index.add(documentsFolder);

// Создание объекта параметров поиска
SearchOptions options = new SearchOptions();
options.setUseSynonymSearch(true); // Enable Synonym Search

// Найдите слово «сделать»
// Помимо слова «сделать», также будут искаться синонимы «делать, получать, иметь,…».
SearchResult result = index.search(query, options);

System.out.println("Query: " + query);
System.out.println("Documents: " + result.getDocumentCount());
System.out.println("Word & Synonym 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]);
            }
        }
    }
}

Получите бесплатную лицензию API

Вы можете [получить бесплатную временную лицензию][17], чтобы использовать API без ограничений пробной версии.

Вывод

Подводя итог, мы обсудили, как искать любое слово вместе с его синонимом в нескольких документах с помощью Java. Самое главное, теперь вы можете попробовать разработать собственное Java-приложение для поиска, подобное [приложению GroupDocs.Search][18].

Узнайте больше [об Java Search Automation API][19] из документации. Чтобы ознакомиться с функциями, попробуйте примеры из репозитория [GitHub][20]. Не стесняйтесь обращаться к нам по любому вопросу через [форум][21].

Смотрите также

  • [Найти синонимы слов с помощью Java][22]
  • [Создайте решение для полнотекстового поиска на Java][23]
  • [Найти и заменить слова в документах с помощью Java][24]
  • [Найти и удалить водяные знаки из документов в Java][25]

[8]: https://products.groupdocs.com/search/java/) [9]: https://downloads.groupdocs.com/search [10]: https://apireference.groupdocs.com/search/java/com.groupdocs.search/Index [11]: https://apireference.groupdocs.com/search/java/com.groupdocs.search.options/SearchOptions [12]: https://apireference.groupdocs.com/search/java/com.groupdocs.search/Index#search(com.groupdocs.search.SearchQuery,%20com.groupdocs.search.options.SearchOptions) [13]: https://apireference.groupdocs.com/search/java/com.groupdocs.search.results/SearchResult [14]: https://apireference.groupdocs.com/search/java/com.groupdocs.search.results/SearchResult [15]: https://apireference.groupdocs.com/search/java/com.groupdocs.search.results/FoundDocument [16]: https://apireference.groupdocs.com/search/java/com.groupdocs.search.results/FoundDocumentField [17]: https://purchase.groupdocs.com/temporary-license [18]: https://products.groupdocs.app/search/total [19]: https://docs.groupdocs.com/search/java/ [20]: https://github.com/groupdocs-search [21]: https://forum.groupdocs.com/ [22]: https://blog.groupdocs.com/ru/2021/09/30/find-synonyms-of-words-using-java/ [23]: https://blog.groupdocs.com/ru/2021/08/07/build-full-text-search-solution-in-java/ [24]: https://blog.groupdocs.com/ru/2022/02/04/find-and-replace-text-in-word-documents-using-java/ [25]: https://blog.groupdocs.com/ru/2020/11/30/find-and-remove-watermarks-from-documents-in-java/