Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] efekt "czy chodziło Ci o"
Forum PHP.pl > Forum > PHP
Civil
Witam,
Mam bazę produktów, z polem "nazwa". W jaki sposób najłatwiej osiągnąć efekt "podpowiedzi" na zasadzie: ktoś wpisze zgarek a skrypt sprawdzi, że w bazie jest produkt "zegarek" i wyświetli podpowiedź? Problemem jest tutaj fakt, że każda nazwa składa się z kilku członów (między innymi rok produkcji, nazwa producenta).

Przychodzą mi do głowy tylko bardzo obciążające bazę MySQL sposoby lub też zapisywanie zapytań, które nie dają odpowiedzi i ręczne dopisywanie do nich propozycji szukania. Jest jakiś inny sposób?
erix
Możesz spróbować zrobić tablicę będącą w relacji wiele-do-wielu, która przechowa mapowania do słów, np:

t1: "zegarek firmy czas"
t1<->t2
t2: zegarek, firmy, czas

(jeśli poczytasz o relacjach N-N, wszystko Ci się wyklaruje winksmiley.jpg)
uirapuru
civil: dawno temu czytałem o algorytmie dopasowującym typowe pomyłki i "przesłyszenia". tzn potrafił znaleźć (za pomocą np. odległości liter od siebie na klawiaturze, podobieństwa przy wypowiadaniu i podobieństwa w/g wyglądu litery np. c ~ o) "podobne" słowo. No i dochodzi jeszcze, że z czasem po każdym kliknięciu zliczać możesz ile razy klient wybrał "poprawną" wersję. tym sposobem ludzie trafiają zwykle do mnie po wpisaniu słowa kapułera. Spolonizowana wersja algorytmu pamięta, że

"c" może się równać k
"p" - akcentowane i ciężko pomylić
"oe" - u
"i" potrafi być "nie usłyszane"

podobnie myślę z frazami typu

sandy bitch - sandy beach (sorki, nic innego mi nie przyszło do głowy).

kolejna sprawa to typowe literówki

localhots - localhost

przy paru trafionych literach i sporym doświadczeniu z danym słowem algorytm znajduje najbardziej prawdopodobne słowo.

Ja bym szedł w tę stronę.
Riklaunim
Google obserwuje co wpisują użytkownicy, jak zmieniają swoje frazy i na bazie tego (i słowników) buduje algorytm sugerujący "poprawną" wersję szukanej frazy. W Google Wave rozbudowali to o kontekstowe tłumaczenie smile.gif
Na lokalną skalę można ograniczyć się do słownika. Dla PHP API do Aspella powinno być dostępne smile.gif
piotr94
tak, generujesz pierwsze bazę słów i tytuły je zawierające coś ala 'zegarek'=>array('artykul_10','artykul_155') tyle że w MySQL, potem przy wyszukiwaniu możesz dać LIKE %slowo% w wyszukiwaniu, a wyniki pobierać AJAX'em i wyświetlać w ramce pod wyszukiwarką, myślę że szczegóły wydają się oczywiste ;-)
Riklaunim
MySQL do Aspella nie jest potrzebny winksmiley.jpg także LIKE po dużej ilości rekordów jest niefajny.
erix
Cytat
civil: dawno temu czytałem o algorytmie dopasowującym typowe pomyłki i "przesłyszenia". tzn potrafił znaleźć (za pomocą np. odległości liter od siebie na klawiaturze, podobieństwa przy wypowiadaniu i podobieństwa w/g wyglądu litery np. c ~ o) "podobne" słowo.

Chyba MySQL ma wbudowaną implementację dla SOUNDEX. winksmiley.jpg
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.