Wyszukiwanie rozmyte pomaga znaleźć w danych treści, które są w pewnym stopniu podobne, a nie dokładnie takie same. Jest to bardzo przydatne, gdy występuje niewielka ilość błędów literowych, błędów ortograficznych lub różnic w danych. W tym artykule omówiono metodę wyszukiwania rozmytego w języku Java w celu znalezienia plików rozproszonych po folderach.
Oto kilka przykładów opracowania przykładowej zawartości wyszukiwania rozmytego:
- Możesz nie mieć pewności, czy w dokumencie użyto pisowni „kolor” czy „kolor”.
- Szukając słowa „John”, można je zapisać jako „Jon” lub być może „Jhon”.
- Próbuję znaleźć „USA”, nawet jeśli ktoś wpisze „USA”
- Jeśli popełnisz „błąd”, och, czekaj, to właściwie jest „błąd”.
Rozwiązaniem na znalezienie takich treści jest Fuzzy Search.
Biblioteka wyszukiwania rozmytego w Javie
Do wyszukiwania rozmytego w Javie użyjemy interfejsu API GroupDocs.Search for Java. Interfejs API charakteryzuje się dużą elastycznością i zapewnia dostosowywalny stopień tolerancji błędów. Ta funkcja jest przydatna w przypadku odmian językowych, takich jak brytyjski i amerykański angielski, oraz literówek.
Dzięki tej bibliotece można przeprowadzić wyszukiwanie rozmyte w szerokim zakresie formatów plików. Wsparcie nie ogranicza się tylko do dokumentów Word (DOC, DOCX), arkuszy kalkulacyjnych (XLS, XLSX), prezentacji (PPT, PPTX), plików PDF, języków znaczników (HTML, XML), Markdown (MD), e-booków (EPUB, CHM, FB2), e-maile (MSG, EML), notatki OneNote, a nawet archiwa ZIP.
Jeśli chcesz poznać wszystkie typy plików, jakie obsługuje ta magia, po prostu zajrzyj do dokumentacji.
Aby rozpocząć, możesz pobrać interfejs API z sekcji pobierania lub po prostu dodać najnowsze repozytorium i konfiguracje Mavena zależności bezpośrednio do swoich aplikacji Java.
Przeprowadźmy wyszukiwanie rozmyte w plikach przy użyciu języka Java
Wykonaj poniższe kroki, aby przeprowadzić wyszukiwanie rozmyte w wielu plikach o różnych formatach w folderach przy użyciu języka Java:
- Zacznij od utworzenia Indeksu przy użyciu folderu, w którym znajdują się Twoje pliki.
- Dodaj ścieżkę głównego folderu do indeksu.
- Podaj zapytanie, które chcesz wyszukać.
- Włącz magię Fuzzy Search, aby rozumiała drobne błędy.
- Ustaw poziom podobieństwa w algorytmie rozmytym.
- Wykonaj wyszukiwanie przy użyciu metody wyszukiwania, aby uzyskać wyniki wyszukiwania.
- Teraz możesz przeglądać SearchResults, aby utworzyć lub wydrukować wynik, jak chcesz.
W poniższym kodzie Java program szuka podobnej zawartości, o którą prosiłeś we wszystkich plikach i podfolderach. Jest tolerancyjny na błędy ortograficzne, do 25% błędów. Jeśli zajrzysz do kodu, zobaczysz, że poziom podobieństwa jest ustawiony na 0,75, co odpowiada dopasowaniu 75%. Jeśli chcesz doprecyzować wyszukiwanie, po prostu zmień poziom podobieństwa w kodzie.
// Rozmyte wyszukiwanie wielu plików w wielu folderach przy użyciu języka Java
// Utworzenie folderu indeksu i dodanie do niego folderu dokumentu
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);
Po uruchomieniu kodu otrzymasz listę pobranych wyników wyszukiwania rozmytego. Jeżeli chcesz dowiedzieć się jak wydrukować wyniki wyszukiwania, czytaj dalej ten artykuł.
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
Drukowanie wyników wyszukiwania
Poniższy kod Java udostępnia dwa sposoby prezentowania wyników wyszukiwania.
- Podświetl wszystkie przybliżone dopasowania.
- Wydrukuj wyniki w czytelnym i możliwym do analizy formacie
// Zaznacz i wydrukuj wyniki wyszukiwania dla wszystkich dokumentów korzystających z języka 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());
// Drukuję znalezione terminy
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]);
}
}
}
}
Uzyskanie bezpłatnej licencji lub bezpłatnej wersji próbnej
Darmowa licencja
Uzyskaj licencję tymczasową za darmo, aby móc przeglądać tę bibliotekę bez ograniczeń.
Bezpłatny okres próbny
Możesz pobrać bezpłatną wersję próbną z sekcji pobierania.
Wniosek
W tym artykule omówiliśmy programowy sposób wyszukiwania rozmytego w języku Java. Pomaga znaleźć przybliżone pasujące słowa, które są w pewnym stopniu podobne, nawet jeśli występują drobne błędy. Ta funkcja jest przydatna w przypadku różnic między brytyjskim i amerykańskim angielskim, literówek, zmian imion i podobnych dźwięków w słowach.
Więcej informacji na temat interfejsu API można znaleźć w dokumentacji.
Jeśli masz pytania lub chcesz porozmawiać więcej, udaj się na forum.