Zobacz wyniki ankiety na temat zarobków programistów w Polsce. Czytaj więcej..
1

Witam,

Już kiedyś poruszałem w rozmowie z wami wyszukiwanie fulltext w oparciu o mysql. W końcu po kilku próbach wszystko ruszyło, okazało się że mój sandbox miał za mało danych i dla tego całe to wyszukiwanie nie działało.

Interesuje mnie pewien temat który spodobał mi się w tym serwisie. Mianowicie jeżeli użytkownik piszę tytuł "pytania", dostaje on na dole podpowiedzi "powiązane".

Co za tym idzie, wpisując ala ma kota, dostaje rekordy gdzie jest ala, kot, i tak dalej. Bla bla bla, wszystko jasne.

Chciał bym zrobić u siebie, wyszukiwarkę duplikatów w dodawanych opisach. Chodzi mi o sytuację w której w bazie danych powiedzmy mam tekst.

"Bardzo lubię programować w php, bo to jedyny słuszny język dzięki któremu aplikacje działają wszędzie.

I jak user wpisze np.

bardzo lubię programować... to ma sie nic nie stać. Ale jak przekroczy, nie wiem jak to nazwać... "relevance" do 60% to dostaje informacje. Uwaga: twój opis prawdopodobnie jest duplikatem xxx u tu materiał który przekroczył 60%... strzeż się plagiatu ;)

No i jak pozmienia słowa np lubię na uwielbiam to wiadomo że zaakceptuje.

Nie chcę dyskutować na temat przydatności tego narzędzia tylko wykonania od strony MYSQL. (wersje w javascripcie myślę że zrobię spod palca) skupmy się że zawartość textarea (sprawdzanego przez nas pod katem duplikatu) mamy już w zmiennej w PHP.

Czy jakaś propozycja ciekawa mogła by od Was paść ?

Z tego co pamiętam, to kładąc mysql dałem wyszukiwanie full text na minimum 3 znaki.

Czyli reasumując, powiedzcie co zrobić..

Biorę kod z textarea, i co ?

Muszę mieć funkcję która PRZELECI CAŁY TEN STRING, i wyciagnie z niego texty powyzej 3 znaki, oddzielone spacjami. Jak coś ma 3 znaki to leci do tablicy, ew kopiujemy do klauzuli WHERE IN (1,2,3,4) gdzie 1 2 3 4 to pierwsze wystapienie slowa >3 znaki, kolejne, kolejne kolejne.

Nie znam się na tym. Mówię jak ja bym zrobił. Ale bez wiedzy praktycznej... mój umysł podpowiada mi to jako jedyną metodę...

Ponadto, jak zreformować wynik relevance do jakiejś logicznej liczby... np do % tów ?

Tak by można dać where relevance > 60%.

Był bym serdecznie wdzięczny i zobowiązany za naświetlenie tego tematu. Prawdopodobnie zajmiemy się nim jutro, ponieważ jestem zmęczony i czas że tak powiem położyć się spać a do snu posłuchać jakiejś fajnej, rockowej piosenki (najlepiej z kobiecym głosem czyli vocalem).

Pozdrawiam

flag

1 Answer

0

samym mysql raczej ciężko będzie coś takiego zrobić. Są algorytmy do sprawdzania jak bardzo dwa teksty są do siebie podobne: http://kodatnik.blogspot.com/2010/06/odlegosc-levenshteina-podobienstwo.html

Możesz też skorzystać z narzędzi indeksujących jak na przykład sphinx http://www.sphinxsearch.com/ - będziesz mógł wyświetlić elementy wyszukane przy pomocy wpisanych już słów i posortować je wg. trafności. Czyli przy długich stringach najwyższa trafność będzie dla takiego przypadku jak opisałeś.

link|flag
aha, a sphinx potrafi obsłużyć też wagi, więc metodą prób i błędów możesz sprawdzić dla jakiego wagi coś wygląda już jak "plagiat" - wtedy możesz wyświetlać alert tylko wtedy, gdy w wynikach pojawi się coś na przykład przynajmniej z wagą 10. Minusem tego rozwiązania jest to, że potrzebujesz uprawnien admina, żeby zainstalować sphinxa (albo hosting, na którym jest zainstalowany) – id02009 Jul 29 at 20:13

Your Answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.