![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 313 Pomógł: 5 Dołączył: 22.03.2005 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
chciałbym stworzyć dość inteligentny algorytm który sprawdzał by czy w bazie danych nie znajduje się treść którą dodaje user bądź treść bardzo podobna. Najprościej to zilustrować na przykładnie strony z kawałami. Są kawały na stronie gdy jest ich powiedzmy ponad 7 tyś trudno jest dla takiego administratora zapamiętać który kawał już jest a którego nie ma. Wiec stworzyć takiego pająka który sprawdzał by bazę w poszukiwaniu takiego samego, lub podobnego kawału np napisanego troszkę inaczej. Osobiście wymyśliłem coś takiego: Podaje przykładowy kawał na którym zilustruję mój sposób: Cytat Jadą 2 blondynki na rowerach. Nagle jedna z nich zsiada z roweru i zaczyna spuszczać powietrze w obu kołach. Druga zdziwiona pyta: - A PO CO TY TO ROBISZ? ![]() - A BO MAM SIODEŁKO ZA WYSOKO! Na co ta druga zaczyna majstrować przy swoim rowerze i zamieniać miejscami siodełko z kierownicą. - A TY CO ROBISZ ? - pyta pierwsza. - ZAWRACAM. NIE BĘDĘ JEŹDZIŁA Z TAKĄ IDIOTKĄ ![]() wyciągamy z danego kawału ciąg 3 słów np "Nagle jedna z" (Ciąg przypadkowy, aby było bardziej optymalne dla kawałów typu Przychodzi baba do lekarza :-) ) i teraz jeżeli znajduje taki ciąg w bazie danych to bierze wycina kolejny losowy ciąg 3 wyrazów np "BO MAM SIODEŁKO"; i sprawdza w tych pasujących czy coś takiego już jest jeżeli okazuje się że jest kawału nie dodaje. w przeciwnym wypadku dodaje kawał do strony. Teraz nasuwa się pytanie co będzie jak trafi tak że 2 ciągi będą takie same i niby kawały będą inne to skrypt ich nie przepuści. Interesuje mnie wasze spojrzenie na problem, jak wy byście rozwiązali tą sytuację. Z góry dziękuję za wszelkie rady. Pozdrawiam mefjiu Ten post edytował mefjiu 28.03.2008, 14:19:20 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 173 Pomógł: 121 Dołączył: 24.09.2007 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
Możesz to zrobić na takiej zasadzie, masz w bazie tabele pytania a w niej kolumne pytanie, odpowiedź i przykładowo będą tam rekordy:
pytanie: co u Ciebie słychać odpowiedz: a nic ciekawego I po pobraniu z bazy rekordów sprawdzasz w nich poprzez preg_match czy w pytaniu znajduje się dany ciąg lub jego część jeżeli tak to pobierze z bazy odpowiedź i wyświetli. To tylko mój tok rozumowania i w taki sposób bym to rozwiązał. Fakt faktem jest trochę zabawy z dodawaniem pytań i odpowiedzi ale efekt końcowy może być bardzo ciekawy. Na wykonanie tego jest bardzo dużo możliwości, trzeba tylko pomyśleć co i jak. mam bota napisanego na forum mybb który po dodaniu nowego tematu sprawdza treść porównuje z pytaniem w bazie i jak znajdzie dane ciągi to na niego odpowiada, odpowiedzią która jest w bazie. Ten post edytował ExPlOiT 28.03.2008, 14:43:19 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 313 Pomógł: 5 Dołączył: 22.03.2005 Ostrzeżenie: (0%) ![]() ![]() |
Przeczytałem twój post 3 razy i nic kompletnie z niego nie rozumiem
![]() po co te pytania poco te odpowiedzi ? |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 1 333 Pomógł: 137 Dołączył: 25.03.2008 Skąd: jesteś?? Ostrzeżenie: (0%) ![]() ![]() |
Skrypt wywoływany jest przy wpisywaniu nowego kawału do bazy danych...
No to tak ![]() Dzieli dodawany tekst i zapisuje w zmiennej (dzieli go oriętując się spacjami)... A wiedz "mama jedzie do taty pobawić się z nim" dzieli na $a='mama' $b='jedzie' $c='do' $b=taty i tak dalej Teraz wciąga 1 rekord z bazy i sprawdza czy wraz z zmiennej $a znajduje się w tym rekordzie jeśli tak to zmienna $wszystkie wyrazy zwiększa się o +1 a zmienna $takiesame zwiększa się o +1 jeśli nie są takie same to $wszystkie wyrazy zwiększa się o +1 a zmienna $takiesame nie zwiększa się... Potem sprawdza czy np $wszystkie podzielić na 2 jest większe niż $takiesame jeśli tak nie dodaje kawału... Pozdrawiam ;p Ps poprawiłem troche ;p Ten post edytował ShadowD 28.03.2008, 14:54:51 -------------------- Mój blog - o wszystkim i niczym ale zazwyczaj związane z informatyką! ;-)
Githube Usługi spawalnicze i monterskie | Park linowy Lublin i Okunince |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 313 Pomógł: 5 Dołączył: 22.03.2005 Ostrzeżenie: (0%) ![]() ![]() |
Pomysł kolegi ShadowD dośc ciekawy tylko jak to się ma na optymalność bo niby cały kawał zostaje zmieniony na zmienne w których jest po jednym wyrazie z kawału czyli sprawdzanie czegoś takiego w bazie np z 7 tys kawałami, nie bedzie długie ?
Ten algorytm nie będzie idealny ponieważ: co jeżeli kawał będzie pisany np Kawał w wbazie "Przychodzi Baba do lekaża (Dalsza treść kawału)" Kawał dodany przez usera "Pewnego pięknego dnia, Przychodzi Baba do lekaża (Dalsza treść kawału)" I taki kawał zostanie dodany do bazy bo: ilość znaków jest większa na prawdopodobieństwo. |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 1 333 Pomógł: 137 Dołączył: 25.03.2008 Skąd: jesteś?? Ostrzeżenie: (0%) ![]() ![]() |
Po pierwsze masz racje moj sposób nie jest zbyt szybki...
Po drugie prawdopodobieństwo może być większe np ileośwszystkichwyrazów podzielić na trzy czy nawet 4 większe niż wrazypowtazajacesie więc to ne jest problemem... Moim zdaniem skrypt nie trudno napisać, można zawsze pozaklejać wyrazy np po d $ab="$a"."$b"; czy też po 3 i sprawdzać trójkami jest to bezpieczniejsze4 i znacznie poprawi szybkość bo 2 wyrazy zwiększą ją o prawie 100% a 3 już o 200% oczywiście prawie... Ten post edytował ShadowD 28.03.2008, 15:08:36 -------------------- Mój blog - o wszystkim i niczym ale zazwyczaj związane z informatyką! ;-)
Githube Usługi spawalnicze i monterskie | Park linowy Lublin i Okunince |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 313 Pomógł: 5 Dołączył: 22.03.2005 Ostrzeżenie: (0%) ![]() ![]() |
To co napisałeś jest właśnie sposobem który wymyśliłem tylko ty nie potrzebnie rozdzielasz każdy wyraz do zmiennej a potem je łączysz. Z tym prawdopodobieństwem można było by pokombinować.
Czekam na inne może bardziej, może mniej optymalne rozwiązania, ważne aby sprawne iw pełni działające ![]() |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 230 Pomógł: 36 Dołączył: 31.03.2006 Skąd: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
Pokombinuj coś z funkcjami: similar_text oraz levenshtein
-------------------- |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 306 Pomógł: 32 Dołączył: 20.01.2008 Ostrzeżenie: (20%) ![]() ![]() |
Wyświetli, w ilu procentach tekst $first jest podobny do tekstu $second. Przy dodawaniu nowego kawału po prostu daj pętlę: $first daj jako nowy kawał, a $second jako stary kawał z bazy i już. -------------------- |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 313 Pomógł: 5 Dołączył: 22.03.2005 Ostrzeżenie: (0%) ![]() ![]() |
No dochodzimy powoli do sedna :-)
Juz prawie widzę przed oczyma doskonały algorytm Panowie woj_tas i smietek Bardzo mi pomogliście Kod który podałeś jest smietek jest mało rozbudowany znalazłem coś w maualu na temat tego
czy przypadkiem kod który podałem nie jest tym samym co ty podałeś ? tylko że zajmuje więcej linijek ? Ten post edytował mefjiu 28.03.2008, 16:09:28 |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 306 Pomógł: 32 Dołączył: 20.01.2008 Ostrzeżenie: (20%) ![]() ![]() |
Ten kod który podałeś szuka w bazie słów (w tablicy) danego słowa. Jeżeli je znajdzie, wyświetla wynik, jeżeli nie, lecz znalazło dość podobny wynik, również go wyświetla. I ten kod nie korzysta z similar_text(), tylko z levenshtein()
-------------------- |
|
|
![]()
Post
#12
|
|
![]() Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
Przeniosłem na PHP
-------------------- To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness; chaotic, confused, vulnerability, to inform yourself. Think for yourself. Question authority. |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 313 Pomógł: 5 Dołączył: 22.03.2005 Ostrzeżenie: (0%) ![]() ![]() |
Ale ogólna zasada działania jest taka sama ?
gdyby zamienić bazę słów baz danych z kawałami ? efekty byłby taki sam ? Dzięuję Cysiaczek za przeniesienie posta do zaawansowanego grona fachowców. Ale ja osobiście myślę że to powinno być przedszkole. Ten post edytował mefjiu 28.03.2008, 22:16:57 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 18.07.2025 - 00:21 |