in Php, mysql si altele, Web - 02.10.2009 - 2 comentarii
De curand am fost nevoit sa fac un algortim de cautare a unor produse ceva mai special. Iata ce idee mi-a venit si ce am reusit sa fac.
Sa zicem ca facem o cautare dupa “amplificator cablu si antena tv”. Facand aceasta cautare cu o simpla spargere in cuvinte si folosind LIKE ‘%cuvant%’ in mysql se pare ca nu vom obtine o ordine foarte ok, insa vom obtine rezultatele de care avem nevoie. Daca sa zicem cautarea a intors peste 100 de rezultate, trebuie afisate produsele cele mai apropiate de cautarea efectuata.
Dupa ce sunt puse rezultatele cautarii intr-un vector, algoritmul le prelucreaza astfel:
1. Primele inregistrari si cele mai importate vor fi cele care au toate cuvintele in titlu si in aceasi ordine (nu conteaza daca au intre ele caractere ciudate sau spatii, precum ignora si anumite cuvinte mici, gen: “si”, “ca”, “de”…)
2. Dupa aceea se fac urmatoarele combinatii de cuvinte: “amplificator cablu”, “amplificator antena”, “amplificator tv”, “amplificator cablu antena”, “amplificator cablu tv”, “amplificator antena tv”, “cablu antena”, “cablu antena tv”, “cablu tv”, “antena tv”. Cu alte cuvinte se formeaza combinatii intre cuvinte insa numai de la stanga spre dreapta. Un exemplu mai simplu: 1, 2, 3, 4. Combinatiile posibile vor fi 1 2, 1 3, 1 4, 1 2 3, 1 2 4, 1 3 4, 2 3, 2 4, 2 3 4, 3 4. Daca am face combinatii sau permutari intre cuvinte am obtine mai multe variante insa si multe irelevante (si-asa unele sunt irelevante), de exemplu am obtine “tv antena”, sau “tv amplificator” care in general sunt folosite invers. Am mers pe ideea ca la fel cum un user ii da un nume logic produsului sau, la fel si cautarea va fi destul de logica, insa de ce nu, la urma urmei pot fi incluse si acele combinatii de cuvinte.
mai departe »