Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Inteligentne wyszukiwanie, rozpoznawanie prostych bledow
slash^
post
Post #1





Grupa: Zarejestrowani
Postów: 278
Pomógł: 36
Dołączył: 9.04.2003
Skąd: Płock

Ostrzeżenie: (0%)
-----


Witam

Zaczalem pisac zaawansowana wyszukiwarke do sklepu internetowego, napotkalem jednak nastepujacy problem:
co zrobic jezeli uzytkownik w wyszukiwanej frazie zrobi literowke??

tzn. mam sklep internetowy i wyszukiwarke typu "wpisz slowo", skrypt przeszukuje baze danych i wyswietla znalezione rzeczy i teraz wszystko jest super jezeli wpisze np. laptop to znajduje laptop xxx, laptop xyz, abc laptop itp. ale co zrobic jezeli ktos omylkowo wpisze "laotop" - literowka przy szybkim pisaniu o blisko p? wyskakuje ze nic nie znaleziono - problem jest niby nikly gdyz latwo to wypatrzyc, ale co jezeli np. ktos szuka po nazwie firmy, ktora to tylko slyszal a nie potrafi jej dokladnie przeliterowac? zamiast coca-cola wpisze koka-kola??

poszukuje jakiegos rozwiazania, ktore mnie naprowadzi na wlasciwe rozwiazanie tego problemu, czy ktos sie juz z czyms takim spotkal? jak to zostalo rozwiazane?

Znalazlem tylko cos w stylu takim:
  1. SELECT *, MATCH (nazwa) AGAINST ('abc') AS cnt FROM produkt WHERE MATCH (nazwa) AGAINST ('abc') ORDER BY cnt DESC


...ale to kompletnie nie to o co mi chodzi (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
seaquest
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 790
Pomógł: 7
Dołączył: 6.02.2003
Skąd: Polska

Ostrzeżenie: (0%)
-----


Wydaje mi się, że lepiej i szybciej będzie to działać w PHP.

Słownik polskich wyrazów możesz pobrać tutaj: http://www.kurnik.pl/slownik/

Musisz go sobie tylko jakoś sparsować i zserializować tak, żeby wyszukiwanie było bardzo szybkie.

Wydaje mi się, że w Twoim przypadku najlepiej pogrupować wyrazy po ilości liter, a następnie jak dostaniesz jakieś słowo, to dołączać taki plik, żeby ilość liter była taka sama. Później liczysz odległość Hamminga dla każdego ze słów i jeśli żadna nie równa się 0 (słowo nie istnieje w słowniku), to bierzesz słowo, które najbardziej pasuje i wyszukujesz w bazie po jednym i drugim.

Jednak zastanawiam się teraz, czy nie powinieneś jakoś inaczej liczyć odległości między słowami dla słowa laptop np: laotop i labtop będą miały taką samą odległość, a "o" jest bliżej "p". Więc może by stworzyć tablicę z odległościami liter od siebie i np jeśli algorytm zwróci Ci na podstawie podanego laotop: [laptop, labtop] to sprawdzasz, która litera jest bliżej "o" na klawiaturze i wybierasz lepsze słowo do wyszukiwania, czyli laptop.

Mam nadzieję, że wystarczająco jasno to opisałem.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 14:01