Zwiększ precyzję wyszukiwania dzięki połączeniu wyszukiwania rozmytego i algorytmu Levenshteina
2 kwietnia 2023

Wyszukiwanie jest jedną z kluczowych funkcji w Internecie. Szybkość i skuteczność odnajdywania potrzebnych informacji, produktów lub usług zależy w dużej mierze od metody wyszukiwania. Tradycyjne metody opierające się na dokładnych frazach i słowach kluczowych mają swoje ograniczenia, szczególnie w przypadku gdy użytkownik nie wie dokładnie, czego szuka lub nie jest pewny, jakiego słowa kluczowego użyć. Właśnie w takich sytuacjach może okazać się przydatne wyszukiwanie rozmyte.
Wyszukiwanie rozmyte (fuzzy search)
Wyszukiwanie rozmyte (fuzzy search) pozwala na odnajdywanie wyników, które nie są dokładnymi dopasowaniami do zapytania, ale zawierają w sobie podobne elementy. Dzięki temu możemy uzyskać szerszy zakres wyników niż w przypadku zwykłego wyszukiwania, co zwiększa prawdopodobieństwo znalezienia poszukiwanego elementu.
Algorytm Levenshteina
Algorytm Levenshteina, zwany również odległością edycyjną, jest wykorzystywany do porównywania podobieństwa między dwoma ciągami znaków, takimi jak zapytania wprowadzone przez użytkowników i tekst zawarty na stronach internetowych. Algorytm Levenshteina określa minimalną liczbę operacji, takich jak usunięcie, wstawienie lub zamiana znaków, które są potrzebne do przekształcenia jednego ciągu znaków w drugi.
Połączenie wyszukiwania rozmytego z algorytmem Levenshteina
Połączenie wyszukiwania rozmytego z algorytmem Levenshteina pozwala na jeszcze bardziej elastyczne i dokładne przeszukiwanie danych tekstowych. Przykładem, który wykorzystuje algorytm Levenshteina jako jedną z technik wyszukiwania rozmytego, jest wyszukiwarka Google. Dzięki wykorzystaniu algorytmu Levenshteina, Google może zrozumieć intencję użytkownika i dostarczyć wyniki wyszukiwania, które pasują do jego potrzeb. Algorytm ten jest stosowany, na przykład, w przypadku literówek lub błędów w zapytaniach wyszukiwania. Jeśli użytkownik wprowadzi zapytanie, które zawiera błąd lub literówkę, Google może wykorzystać algorytm Levenshteina, aby zrozumieć, co użytkownik miał na myśli i dostarczyć mu wyniki wyszukiwania, które są bliskie temu, czego szukał.
Dlatego połączenie wyszukiwania rozmytego i algorytmu Levenshteina jest szczególnie przydatne dla użytkowników, którzy nie znają dokładnie terminologii lub nie są pewni, jakie słowa kluczowe powinni użyć do wyszukiwania potrzebnych informacji. Dzięki temu połączeniu użytkownik może uzyskać szerszy zakres wyników, a jednocześnie algorytm Levenshteina sortuje wyniki według stopnia podobieństwa, co pozwala użytkownikowi na znalezienie najbardziej odpowiedniego wyniku jako pierwszego.
Wniosek
Połączenie wyszukiwania rozmytego i algorytmu Levenshteina jest jednym z najbardziej efektywnych sposobów na zwiększenie precyzji wyszukiwania w bazach danych lub aplikacjach internetowych. Dzięki temu połączeniu użytkownik może uzyskać dokładniejsze i bardziej elastyczne wyniki wyszukiwania, a algorytm Levenshteina sortuje je według stopnia podobieństwa, co ułatwia wybór najbardziej odpowiedniego wyniku. Wszystko to sprawia, że wyszukiwanie staje się bardziej intuicyjne i skuteczne, co z pewnością przyczyni się do poprawy jakości pracy z danymi tekstowymi.
Istnieją gotowe rozwiązania dotyczące wyszukiwania rozmytego, na przykład Elasticsearch czy Solr, które są otwartoźródłowymi wyszukiwarkami. Ale można również napisać własny kod. Napisanie własnego kodu ma taką przewagę przed gotowymi rozwiązaniami, że pozwala na pełną kontrolę nad procesem i umożliwia dostosowanie algorytmu do konkretnych potrzeb projektu.
Pokażę Wam w jaki sposób napisać kod w Python przy pomocy biblioteki “thefuzz”, która może być używana do wyszukiwania rozmytego:
Najpierw z poziomu konsoli musimy zainstalować “thefuzz”
pip install thefuzz
Następnie:
# Importowanie biblioteki 'fuzz' z pakietu 'thefuzz'
from thefuzz import fuzz
# Definicja listy stringów do wyszukania
string_search = ["Inwestycyjny poradnik", "bogaty ojciec", "Inwestycyjny poradnik bogaty ojciec", "Inwestycje bogatego ojca", "ojciec bogaty poradnik inwestycyjny"]
# Definicja stringa, z którym porównywane będą stringi z listy
string_base = "Inwestycyjny poradnik Bogatego Ojca"
# Iteracja po liście stringów do wyszukania i porównanie ich z podstawowym stringiem
for elem in string_search:
# Obliczenie współczynnika podobieństwa za pomocą metody 'ratio' z biblioteki 'fuzz'
similarity_ratio = fuzz.ratio(elem.lower(), string_base.lower())
# Przypisanie pustego stringa do zmiennej 'txt'
txt = ''
# Sprawdzenie, w jakim przedziale znajduje się współczynnik podobieństwa
if similarity_ratio <= 25:
txt = 'bardzo niskie podobieństwo'
elif similarity_ratio <= 50:
txt = 'niskie podobieństwo'
elif similarity_ratio <= 75:
txt = 'średnie podobieństwo'
else:
txt = 'wysokie podobieństwo'
# Wyświetlenie wyniku wraz z opisem
print(f"{elem}: {similarity_ratio}, {txt}")
Wynik wygląda następująco:

Biblioteka "thefuzz" w języku Python służy do porównywania tekstów i znajdowania najbliższych dopasowań między nimi. Jest to narzędzie użyteczne w analizie danych, wyszukiwaniu i dopasowywaniu tekstu, przetwarzaniu języka naturalnego i wielu innych dziedzinach. Korzysta ona z różnych algorytmów do porównywania tekstów, w tym z algorytmu Levenshteina. W bibliotece "thefuzz" algorytm Levenshteina jest używany do porównywania tekstu i obliczania jego podobieństwa, wraz z innymi metodami, takimi jak długość najdłuższego wspólnego podciągu i częściowe dopasowanie. Można go wykorzystać na przykład do tworzenia systemów dopasowywania tekstu, do przetwarzania języka naturalnego lub do weryfikacji pisowni. Jeśli byśmy używali tego kodu, aby zaprezentować wyniki wyszukiwania, warto dodać funkcję sortującą wyniki. Kod można dowolnie rozbudowywać i dostosowywać do swoich potrzeb.