Civil
11.11.2009, 22:42:27
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
11.11.2009, 23:46:45
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

)
uirapuru
12.11.2009, 00:04:54
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
12.11.2009, 00:57:12
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

Na lokalną skalę można ograniczyć się do słownika. Dla PHP API do Aspella powinno być dostępne
piotr94
12.11.2009, 15:49:28
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
12.11.2009, 17:31:17
MySQL do Aspella nie jest potrzebny

także LIKE po dużej ilości rekordów jest niefajny.
bełdzio
12.11.2009, 18:30:34
erix
12.11.2009, 18:49:54
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.
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.