We hebben onlangs besproken hoe u alle synoniemen van een woord kunt krijgen. Het zou geweldig zijn als we deze synoniemen in veel verschillende documenten zouden kunnen terugvinden. In dit artikel zullen we zien hoe u elk woord en de bijbehorende synoniemen in meerdere bestanden kunt doorzoeken met behulp van Java.

Hieronder worden de volgende onderwerpen behandeld:

Java API - Zoek synoniemen in meerdere bestanden

GroupDocs.Search demonstreert de Java API GroupDocs.Search for Java. Hiermee kunnen woorden en hun synoniemen worden doorzocht in meerdere bestanden van de opgegeven map. Het ondersteunt een lange lijst met verschillende bestandsindelingen en verschillende zoektechnieken. Enkele van deze functies worden hieronder genoemd en u kunt ze in combinatie gebruiken om uw doel te bereiken:

  • Booleaans zoeken
  • Hoofdlettergevoelig zoeken
  • Markeer zoekresultaten
  • Homofoon zoeken
  • Zin zoeken
  • Reguliere expressies zoeken
  • Zoek op brokken
  • Synoniem zoeken

Downloaden of configureren

U kunt het JAR-bestand downloaden van de downloads-sectie, of gewoon de nieuwste repository- en afhankelijkheidsconfiguraties voor pom.xml van uw maven-gebaseerde Java-applicaties downloaden.

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

Vind synoniemen in meerdere bestanden met behulp van Java

Laten we snel overgaan tot het zoeken naar synoniemen in bestanden. De volgende stappen laten zien hoe u met Java kunt zoeken naar synoniemen (woorden met vergelijkbare betekenissen) in bestanden in een map:

  • Definieer de indexmap, de map van het document en de zoekopdracht (het te zoeken woord).
  • Maak een index met behulp van een gedefinieerde indexmap met de klasse Index.
  • Voeg de documentenmap toe aan de index.
  • Schakel het zoeken naar synoniemen in met SearchOptions.
  • Roep de methode search van Index class aan en geef de query door met zoekopties.
  • Druk de samenvatting af met de eigenschappen van de opgehaalde klasse SearchResult.

De volgende broncode laat zien hoe u alle synoniemen in bestanden kunt vinden met Java:

// Zoek synoniemen in meerdere bestanden en mappen met behulp van Java
String indexFolder = "path/indexFolder";
String documentsFolder = "path/documentsFolder";
String query = "make";

// Een index maken in de opgegeven map
Index index = new Index(indexFolder);
index.add(documentsFolder);

// Een object met zoekopties maken
SearchOptions options = new SearchOptions();
options.setUseSynonymSearch(true); // Enable Synonym Search

// Zoek op het woord 'maken'
// Naast het woord 'make' zal er ook gezocht worden op de synoniemen 'do, get, have, ...'
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());

Het volgende is de uitvoer van de bovenstaande code:

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

Uit de zoekresultaten die in de bovenstaande stap zijn verkregen, kunt u informatie krijgen over elk woord en synoniem van de zoekopdracht. De volgende stappen geven de resultaten in detail weer nadat alle synoniemen en het aantal keren dat ze voorkomen in elk document zijn opgehaald:

  • Voer eerst de zoekopdracht uit om de SearchResult te krijgen.
  • Blader door het zoekresultaat om met elk FoundDocument te werken.
  • Druk de respectieve eigenschappen van elk FoundDocument af.
  • Pak nu het FoundDocumentField binnen elk FoundDocument uit en doorloop het.
  • Elk FoundDocumentField heeft zijn eigen termen, voorkomens en andere eigenschappen. Gebruik de respectievelijke getter.

De volgende broncode geeft het resultaat weer van het zoeken naar synoniemen, samen met het aantal keren dat elke gezochte term in Java voorkomt.

// De zoekresultaten voor synoniemen afdrukken in 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());
  
        // Gevonden termen afdrukken
        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]);
            }
        }
    }
}

Het volgende is de uitvoer van de bovenstaande code:

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 

Zoek synoniemen en afdrukresultaten in Java - Volledige code

Laten we de bovenstaande twee stappen combineren, dus hier is de volledige broncode. Ten eerste vindt het alle synoniemen volgens de opgegeven zoekopdracht. Vervolgens worden alle exemplaren van elk synoniem in elk document in Java afgedrukt.

// Zoek synoniemen in meerdere bestanden en mappen met behulp van Java
String indexFolder = "path/indexFolder";
String documentsFolder = "path/documentsFolder";
String query = "make";

// Een index maken in de opgegeven map
Index index = new Index(indexFolder);
index.add(documentsFolder);

// Een object met zoekopties maken
SearchOptions options = new SearchOptions();
options.setUseSynonymSearch(true); // Enable Synonym Search

// Zoek op het woord 'maken'
// Naast het woord 'make' zal er ook gezocht worden op de synoniemen 'do, get, have, ...'
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());
  
        // Gevonden termen afdrukken
        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]);
            }
        }
    }
}

Ontvang een gratis API-licentie

U kunt een gratis tijdelijke licentie krijgen om de API te gebruiken zonder de evaluatiebeperkingen.

Conclusie

Om samen te vatten, hebben we besproken hoe elk woord samen met het synoniem in meerdere documenten kan worden doorzocht met behulp van Java. Het belangrijkste is dat u nu kunt proberen uw eigen Java-app te ontwikkelen om te zoeken, net als GroupDocs.Search App.

Lees meer over de Java Search Automation API in de documentatie. Probeer voorbeelden uit de GitHub-repository om de functies te ervaren. Voel je vrij om ons te bereiken voor al je vragen via het forum.

Zie ook