Fuzzy-Suche mit Java

Mit der Fuzzy-Suche können Sie in Ihren Daten Inhalte finden, die eher ähnlich, aber nicht genau gleich sind. Es ist sehr praktisch, wenn es kleine Tippfehler, Rechtschreibfehler oder Abweichungen in den Daten gibt. In diesem Artikel geht es um die Java-Methode zur Durchführung einer Fuzzy-Suche, um Dateien zu finden, die in Ordnern verstreut sind.

Hier sind einige Beispiele, um den Beispielinhalt der Fuzzy-Suche näher zu erläutern:

  • Möglicherweise sind Sie nicht sicher, ob das Dokument die Schreibweise „Farbe“ oder „Farbe“ verwendet.
  • Wenn man nach „John“ sucht, könnte man es tatsächlich als „Jon“ oder vielleicht „Jhon“ buchstabieren.
  • Ich versuche, „USA“ zu finden, auch wenn jemand „USA“ eingibt.
  • Wenn Sie einen „Fehler“ machen, ist es tatsächlich ein „Fehler“.

Die Lösung zum Auffinden solcher Inhalte ist die Fuzzy-Suche.

Java-Fuzzy-Suchbibliothek

Um Fuzzy-Suchen in Java durchzuführen, verwenden wir die API GroupDocs.Search for Java. Die API zeichnet sich durch hohe Flexibilität aus und bietet ein anpassbares Maß an Fehlertoleranz. Diese Funktion ist vorteilhaft, wenn es um Sprachvariationen wie britisches und amerikanisches Englisch sowie um Tippfehler geht.

Mit dieser Bibliothek kann eine Fuzzy-Suche in einer Vielzahl von Dateiformaten durchgeführt werden. Die Unterstützung beschränkt sich nicht nur auf Word-Dokumente (DOC, DOCX), Tabellenkalkulationen (XLS, XLSX), Präsentationen (PPT, PPTX), PDFs, Auszeichnungssprachen (HTML, XML), Markdown (MD), eBooks (EPUB, CHM, FB2), E-Mails (MSG, EML), OneNote-Notizen und sogar ZIP-Archive.

Wenn Sie wissen möchten, welche Dateitypen diese Magie verarbeiten kann, schauen Sie sich einfach die Dokumentation an.

Um zu beginnen, können Sie die API aus dem Download-Bereich herunterladen oder einfach die neuesten Repository- und Abhängigkeits-Maven-Konfigurationen direkt in Ihre Java-Anwendungen hinzufügen.

Lassen Sie uns mit Java eine Fuzzy-Suche in Dateien durchführen

Befolgen Sie diese Schritte, um mithilfe von Java eine Fuzzy-Suche in mehreren Dateien verschiedener Dateiformate in Ordnern durchzuführen:

  1. Erstellen Sie zunächst einen Index unter Verwendung des Ordners, in dem sich Ihre Dateien befinden.
  2. Fügen Sie den Hauptordnerpfad zum Index hinzu.
  3. Geben Sie die Suchabfrage ein, nach der Sie suchen möchten.
  4. Aktivieren Sie die Magie der Fuzzy-Suche, damit auch kleine Fehler erkannt werden.
  5. Legen Sie den Ähnlichkeitsgrad im Fuzzy-Algorithmus fest.
  6. Führen Sie die Suche mit der Suchmethode aus, um die Suchergebnisse zu erhalten.
  7. Jetzt können Sie die SearchResults durchlaufen, um die Ausgabe nach Ihren Wünschen zu erstellen oder zu drucken.

Im folgenden Java-Code sucht das Programm in allen Dateien und Unterordnern nach ähnlichen Inhalten, die Ihren Anforderungen entsprechen. Es ist tolerant gegenüber Rechtschreibfehlern, bis zu 25 %. Wenn Sie einen Blick auf den Code werfen, werden Sie feststellen, dass der Ähnlichkeitsgrad auf 0,75 eingestellt ist, was einer Übereinstimmung von 75 % entspricht. Wenn Sie die Suche verfeinern möchten, ändern Sie einfach den Ähnlichkeitsgrad im Code.

// Fuzzy-Suche nach mehreren Dateien in mehreren Ordnern mit Java

// Erstellen Sie einen Indexordner und fügen Sie den Ordner des Dokuments hinzu
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);

Nachdem Sie den Code ausgeführt haben, erhalten Sie eine Liste der abgerufenen Fuzzy-Suchergebnisse. Wenn Sie sehen möchten, wie Sie die Suchergebnisse drucken, lesen Sie diesen Artikel weiter.

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

Suchergebnisse drucken

Der folgende Java-Code bietet zwei Möglichkeiten zur Darstellung Ihrer Suchergebnisse.

  • Markieren Sie alle ungefähren Übereinstimmungen.
  • Drucken Sie die Ergebnisse in einem lesbaren und analysierbaren Format aus
// Markieren und drucken Sie Suchergebnisse für alle Dokumente, die Java verwenden
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());

        // Gefundene Begriffe drucken
        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]);
            }
        }
    }
}

Erhalten Sie eine kostenlose Lizenz oder eine kostenlose Testversion

Freie Lizenz

Besorgen Sie sich kostenlos eine vorübergehende Lizenz, um diese Bibliothek ohne Einschränkungen zu erkunden.

Kostenlose Testphase

Sie können die kostenlose Testversion herunterladen im Download-Bereich.

Java-API zum Suchen in Dateien und Ordnern

Abschluss

In diesem Artikel haben wir die programmatische Java-Methode zur Durchführung der Fuzzy-Suche untersucht. Es hilft dabei, ungefähr passende Wörter zu finden, die irgendwie ähnlich sind, auch wenn es kleine Fehler gibt. Diese Funktion ist praktisch, um mit Unterschieden zwischen britischem und amerikanischem Englisch, Tippfehlern, Namensänderungen und ähnlichen Lauten in Wörtern umzugehen.

Weitere Informationen zur API finden Sie in der Dokumentation.

Wenn Sie Fragen haben oder mehr diskutieren möchten, besuchen Sie das Forum.


Siehe auch