Skocz do zawartości

Sugestie przy wyszukiwarce..


sniver

Rekomendowane odpowiedzi

Witam

Zmagam się z ciekawym zagadnieniem. Piszę wyszukiwarkę :D

hehe nic nadzwyczajnego, tymbardziej że szuka produktów w bazie opartej na mysql'u...

No ale do rzeczy. Szuka mi pięknie z polskimi i bez polskich znaków, sortuje w zależności od znaleziska np. jeśli znajdzie w tytule to jest wysoko, a jeśli w opisie produktu to gdzieś tam niżej...

No ale co jeśli ktoś wpisze "kubk" zamiast "kubek" - każdy wie że nic nie znajdzie. No i wpadłem na pomysł zapożyczony z google, czyli sugestie. Np chcę by pisało coś tak jak tam: Czy chodziło może o "kubek"?

Nie wiem jak sie za to zabrać. Czy ktoś ma z tym jakieś doświadczenie??

..:: Strony WWW ::....:: Nowe technologie ::....:: Hurtownie ::....:: Reszte znajdziesz w google.pl ::..

Odnośnik do komentarza
Udostępnij na innych stronach

Witaj, ja w kilku projektach stosowałem metodę n-gramów sprawdzała się bardzo dobrze. W pracy mgr stosowałem tą metodę do porównywania nie tylko poszczególnych wyrazów, ale całych zdań. Minus tej metody to złożoność obliczeniowa.

Odnośnik do komentarza
Udostępnij na innych stronach

A mnie zastanawia jak metodę n-gramów zastosować w bazie danych?

Bo odnoszę wrażenie że to wymagać bedzie sporo zasobów gdy szukamy słowa które jest podobne do wpisanego przez nas.

Tak jak autor wątku napisał słowo "kubk"

To aby znaleźć słowo podobne musimy sprawdzić z wszystkimi słowami w bazie, no chyba że są jakieś ograniczenia początkowe

np. założenie że pierwsze 2 litery są prawidłowe wtedy zbiór sie ogranicza :(

Odnośnik do komentarza
Udostępnij na innych stronach

Kiedyś się zastanawiałem jak to google robi. I z tych zastanawian wyszla mi teoria nastepujaca. Zaznaczam, ze są to moje domysły.

Szukanie 'w locie' prawdopodobnego wyrazu nie ma sensu bo nie starczy mocy.

Potrzebna nam jest tablica "skojarzeń", czyli związanie "kubk" i "kubek" to by zalatwialo sprawe ale jak taka tablice stworzyc, zeby nie byla za duza i uwzgledniala tylko prawdopodobne literówki.

I tu googiel ma poteżne narzędzie w postaci dużej liczby zapytań - niestety to jest jego przewaga nad małymi wyszukiwareczkami.

Użytkownik szuka 'kubk' -> mało odpowiedzi. Co robi użytkownik widząc, że się pomylił? wpisuje poprawnie "kubek" i ... mamy powiązanie.

Przy odpowiedniej ilości zapytań i błędów łatwo stworzyć taką tablicę "skojarzeń", przy małych wyszukiwarkach trudna sprawa, ewentualnie trzeba czakać aż się uzbiera odpowiednia liczba danych.

Odnośnik do komentarza
Udostępnij na innych stronach

No właśnie google, to google. Ale wiele innych stron ma podobne rozwiązanie. Przykładowo youtube, chodz być może gogiel też tam palce maczał :>

Na początku pomyślałem że zrobie to na zasadzie stopnia podobieństwa. I tak jeśli ktoś wpisał by kubk, to dla porównania jest to podobne do kubek w 80% (gdy ciąg znaków ułorzony kolejności jest taki sam...). No ale przewiercenie bazy danych przeszukując w taki sposób niestety jest długie i mało elastyczne.

Co do metody n-gramów, to ciekawe rozwiązanie ale nijak mi to wychodzi :/

Maximus_Marius & papieros: wydaje mi sie to ciekawe rozwiązanie :-)

..:: Strony WWW ::....:: Nowe technologie ::....:: Hurtownie ::....:: Reszte znajdziesz w google.pl ::..

Odnośnik do komentarza
Udostępnij na innych stronach

Co do ilości danych jaką trzeba uzbierać aby nam sie zrobiła baza skojarzeń to nie przesadzał bym z ilością.

Jedna , dwie, czy trzy poprawione pomyłki już mogą dać wystarczających danych aby to funkcjonowało.

Kwestia tylko jak wykrywać zachowanie usera, bo google używa do tego JS i wie w co klikamy , tak samo trzeba by było sie zastanowić jak rozroźnić co jest kolejną wyszukiwana frazą a co poprawką bo ktoś sie pomylił ;)

Co do n-gramów to nadal sie zastanawiam nad zastosowaniem tego w bazie danych ale na razie nie widzę szans na wydajen rozwiązanie ;)

Odnośnik do komentarza
Udostępnij na innych stronach

Ja bym zrobił to w ten sposób: zakładam, że wyszukiwarka ma odpowiednią strukturę danych np. drzewo w którym węzeł jest odpowiednim znakiem we frazie. I teraz dla każdej nowo zaindeksowanej frazy generujemy x fraz literówek, testujemy je metodą n-gramów i wybieramy najlepsze jako te podobne. Następnie dodajemy do drzewa wyszukiwania nowe węzły dla tych fraz jednak oflagowujemy te końcowe, że to literówki. Przy założeniu że operujemy 26 znakami w drzewie, wyszukwianie frazy np. 10 literowej w najgorszym wypadku wymaga zaledwie 260 porównań (w najlepszym 10), myślę że to nie wiele, a dzięki temu nie trzeba analizować fraz na bieżąco.

Odnośnik do komentarza
Udostępnij na innych stronach

Wyznacznikiem podobieństwa był by ustalony próg (z zakresu [0,1]) dla wartości zwracanych przez metodę n-gramów. Można to regulować na podstawie potrzeb i wyników zwracanych przez metodę.

edit:

Jeśli chodzi o konkretne wartości to trzeba przeprowadzić trochę testów i ocenić czy dla danego współczynnika podobieństwo jest wystarczające dla danego zastosowania

edit2:

Miałem chwile to przygotowałem kilka przykładów obliczonej wartości tej metody o ile się nie walnąłem to wartości po prawej powinny być poprawnie.

Porównanie słowo1 słowo2|wartość

pozycjonowanie pozycjonowanie|1

podobne

pozycjonowanie spozycjonowanie|0.875

pozycjonowanie wypozycjonowanie|0.786

pozycjonowanie dopozycjonowanie|0.779

literówki

pozycjonowanie posycjonowanie|0.657

pozycjonowanie pyzycjonowanie|0.761

pozycjonowanie pozycjonownie|0.580

pozycjonowanie pozycjonowani|0.866

pozycjonowanie pozycionowanie|0.495

pozycjonowanie pozychonowanie|0.485

pozycjonowanie pozycjowanie|0.476

pozycjonowanie poxyconowanie|0.4

inne słowa 14 literowe

pozycjonowanie pozyskiwaliśmy|0.133

pozycjonowanie pozyskiwaniach|0.228

pozycjonowanie pozytywistkach|0.152

inne słowa

pozycjonowanie pozycja|0.228

pozycjonowanie mandarynka|0.066

pozycjonowanie pies|0.038

pozycjonowanie kot|0.028

Na podstawie kilku takich testów możesz dobrać wartość progu. Mam nadzieje, że pomogłem. Pozdrawiam.

Odnośnik do komentarza
Udostępnij na innych stronach

super!

A jak to obliczyłeś? Nie że nie szukam tylko zastanawiam się od paru dni włąśnie nad podobnym rozwiązaniem. Ale tego typu prawdopodobieństwo i obliczenia to dla mnie czarna magia...

..:: Strony WWW ::....:: Nowe technologie ::....:: Hurtownie ::....:: Reszte znajdziesz w google.pl ::..

Odnośnik do komentarza
Udostępnij na innych stronach

Wszystko masz w PDF który jest podany w tym wątku , zamiast porównywać cale słowo dokonujesz porównania odcinakami

np. 3-gram dla przykładu powyżej

pozycjonowanie =

poz

ozy

zyc

ycj

cjo

jon

ono

now

owa

wan

ani

nie

ie

e

spozycjonowanie =

spo

poz

ozy

zyc

ycj

cjo

jon

ono

now

owa

wan

ani

nie

ie

e

Tu masz kawałek kodu w PHP

https://boxoffice.ch/pseudo/code_expl/code.php

Pewnie można tego znaleźć więcej

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności