Fuzzy Search met Java

Met Fuzzy Search kunt u inhoud vinden die enigszins op elkaar lijkt, maar niet precies hetzelfde, in uw gegevens. Het is superhandig als er kleine typefouten, spelfouten of variaties in de gegevens voorkomen. Dit artikel gaat over de Java-manier om fuzzy search uit te voeren om bestanden te vinden die verspreid over mappen staan.

Hier zijn enkele voorbeelden om de voorbeeldinhoud van de fuzzy search uit te werken:

  • Mogelijk weet u niet zeker of het document de spelling ‘kleur’ of ‘kleur’ gebruikt.
  • Wanneer u zoekt naar ‘John’, kan dit feitelijk worden gespeld als ‘Jon’ of misschien ‘Jhon’.
  • Ik probeer ‘VS’ te vinden, zelfs als iemand ‘VS’ typt
  • Als je een ‘fout’ maakt, oh wacht, het is eigenlijk een ‘fout’.

De oplossing voor het vinden van dergelijke inhoud is Fuzzy Search.

Java Fuzzy Search-bibliotheek

Om vage zoekopdrachten in Java uit te voeren, gebruiken we de API GroupDocs.Search for Java. De API is zeer flexibel en biedt een aanpasbare mate van fouttolerantie. Deze functie is gunstig bij het omgaan met taalvariaties zoals Brits en Amerikaans Engels, en typefouten.

Met deze bibliotheek kan fuzzy search worden uitgevoerd binnen een grote variatie aan bestandsformaten. De ondersteuning is niet alleen beperkt tot Word-documenten (DOC, DOCX), spreadsheets (XLS, XLSX), presentaties (PPT, PPTX), PDF’s, opmaaktalen (HTML, XML), Markdown (MD), eBooks (EPUB, CHM, FB2), e-mails (MSG, EML), OneNote-notities en zelfs ZIP-archieven.

Als je alle bestandstypen wilt weten die deze magie aankan, kijk dan eens naar de documentatie.

Om aan de slag te gaan, kunt u de API uit de downloadsectie halen, of gewoon de nieuwste repository en afhankelijkheid Maven-configuraties rechtstreeks aan uw Java-applicaties toevoegen.

Laten we Fuzzy zoeken in bestanden met Java

Volg deze stappen om een fuzzy-zoekopdracht uit te voeren in meerdere bestanden met verschillende bestandsindelingen in mappen met behulp van Java:

  1. Begin met het maken van een Index met behulp van de map waarin uw bestanden zich bevinden.
  2. Voeg het hoofdmappad toe aan de index.
  3. Geef de zoekopdracht op waarin u wilt zoeken.
  4. Schakel de magie van Fuzzy Search in, zodat kleine fouten worden begrepen.
  5. Stel het gelijkenisniveau in het Fuzzy-algoritme in.
  6. Voer de zoekopdracht uit met behulp van de zoekmethode om de zoekresultaten te krijgen.
  7. Nu kunt u de SearchResults doorlopen om de uitvoer naar wens te maken of af te drukken.

In de onderstaande Java-code zoekt het programma naar vergelijkbare inhoud, waar u om vroeg in alle bestanden en submappen. Het is tolerant ten aanzien van spelfouten, tot 25% fouten. Als u naar de code kijkt, ziet u dat het gelijkenisniveau is ingesteld op 0,75, wat overeenkomt met de overeenkomst van 75%. Als u de zoekopdracht wilt verfijnen, wijzigt u gewoon het gelijkenisniveau in de code.

// Fuzzy Zoek meerdere bestanden in meerdere mappen met behulp van Java

// Een indexmap maken en de map van het document eraan toevoegen
Index index = new Index("path/indexing-folder-path");
index.add("path/parent-folder");

SearchOptions options = new SearchOptions();
options.getFuzzySearch().setEnabled(true); // Enabling the fuzzy search
options.getFuzzySearch().setFuzzyAlgorithm(new SimilarityLevel(0.75));

String query = "nulla"; // search approximate matches of the provided query  
SearchResult result = index.search(query, options);

Nadat u de code hebt uitgevoerd, krijgt u een lijst met opgehaalde vage zoekresultaten. Als je wilt zien hoe je de zoekresultaten kunt afdrukken, lees dan dit artikel verder.

Query: nulla
 Documents: 2
 Occurrences: 135

     Document: Lorem ipsum.docx
     Occurrences: 132
         Field: content
         Occurrences: 132
             nulla               98
             nullam              34

     Document: EnglishText.txt
     Occurrences: 3
         Field: content
         Occurrences: 3
             dull                1
             full                1
             fully               1

Zoekresultaten afdrukken

De volgende Java-code biedt twee manieren om uw zoekresultaten te presenteren.

  • Markeer alle geschatte overeenkomsten.
  • Druk de resultaten af in een leesbaar en analyseerbaar formaat
// Markeer en druk zoekresultaten af voor alle documenten met behulp van Java
for (int i = 0 ; i < result.getDocumentCount(); i++)
{
    FoundDocument document = result.getFoundDocument(i);
  
    OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, "path/Highlight" + i + ".html");
    Highlighter highlighter = new DocumentHighlighter(outputAdapter);
    index.highlight(document, highlighter);
 
    System.out.println("\tDocument: " + document.getDocumentInfo().getFilePath());
    System.out.println("\tOccurrences: " + document.getOccurrenceCount());
    for (FoundDocumentField field : document.getFoundFields()) {
        System.out.println("\t\tField: " + field.getFieldName());
        System.out.println("\t\tOccurrences: " + field.getOccurrenceCount());

        // Gevonden termen afdrukken
        if (field.getTerms() != null) {
            for (int k = 0; k < field.getTerms().length; k++) {
                System.out.println("\t\t\t" + field.getTerms()[k] + " - " + field.getTermsOccurrences()[k]);
            }
        }
    }
}

Een gratis licentie of een gratis proefversie verkrijgen

Gratis vergunning

Verkrijg gratis een tijdelijke licentie om deze bibliotheek zonder beperkingen te verkennen.

Gratis proefperiode

U kunt de gratis proefversie downloaden via de downloadsectie.

Java API voor zoeken in bestanden en mappen

Conclusie

In dit artikel hebben we de programmatische Java-manier onderzocht om Fuzzy-zoekopdrachten uit te voeren. Het helpt bij het vinden van overeenkomende woorden die ongeveer op elkaar lijken, zelfs als er kleine fouten zijn. Deze functie is handig voor het omgaan met verschillen tussen Brits en Amerikaans Engels, typefouten, naamswijzigingen en soortgelijke klanken in woorden.

Voor meer informatie over de API, bekijk de documentatie.

Als je vragen hebt of meer wilt bespreken, ga dan naar het forum.


Zie ook