Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Kawały
Forum PHP.pl > Forum > Przedszkole
xamrex
Witam,
Mam stronę z kawałami,
Każdy użytkownik może dodać swój kawał.

Baza wygląda tak:
  1. INSERT INTO `nuke_poems` (`poemid`, `author`, `email`, `date`, `name`, `cat`, `poem`, `rating`, `ratingtot`, `hits`, `ratings`) VALUES
  2. (1, 'Metallica', 'metallica_91@interia.pl', '2004-08-07 16:41:34', 'Jagiełło', '6', 'Tata krzyczy na Jasia: <br />\r\n- I znów pała z historii!! <br />\r\n- Tato, to przez Jagiełłę!! <br />\r\n- To nie zadawaj się więcej z takim łobuzem!! ', '37', '9', 279, '4.11111111'),
  3. (2, 'Metallica', 'metallica_91@interia.pl', '2004-08-07 16:41:34', 'KOT', '15', 'Jasio idzie z mamą (blondynką)i zauważył kota. Pyta się mamy czy to kot, czy kotka, a ona na to: <br />\r\n- Jasiu, to kot. Nie widzisz, że ma wąsy... ', '22', '4', 286, '5.5'),
  4. (3, 'Metallica', 'metallica_91@interia.pl', '2004-08-07 16:41:34', 'Maszyna', '6', 'ojciec Jasia mial fabryke w ktorej produkowano parówki, ojciec musial gdzies wyjsc i chcial, aby go Jasiu zastapil na moment, mowi do Jasia: <br />\r\n- Jasiu, widzisz... Do tej maszyny wkladasz barana i wychodzi parówka <br />\r\nJasiu zrozumial i po chwili pyta tatę: <br />\r\n- Tato, a jest taka maszyna, do ktorej sie wklada parówkę i wychodzi baran? <br />\r\n- Tak, twoja matka. <br />\r\n<br />\r\n', '87', '9', 402, '9.66666666'),
  5. (4, 'Metallica', 'metallica_91@interia.pl', '2004-08-07 16:41:34', 'Poród', '6', 'Jasiu i tata odbierają poród mamy w domu Nagle gaśnie światło i nic nie widać tata mówi do Jasia: <br />\r\n-Jasiu weż latarke i świeć ja będe odbierał dziecko. <br />\r\nMama prze ,krzyczy i jest tata odbiera,odbiera jednego,drugiego-troszke zdziwiony,trzeciego-przerażony,czwartego <br />\r\ni mówi: <br />\r\n-Jasiu gaś latarke bo do światła lecą. <br />\r\n', '33', '5', 240, '6.6'),
  6. (5, 'Metallica', 'metallica_91@interia.pl', '2004-08-07 16:41:34', 'Rodzice', '6', 'A więc, rodzice Jasia chcieli sie troche podymać ale mieli maly dom i nie wiedzieli gdzie zostawić dzieci. Wtem tata wpadl na pomysl: <br />\r\n- Jasiu!! Wyjdź na balkon i mów mnie i mamie co sie dzieje dookola. <br />\r\nJasiu wyszedl na balkon i nawija: <br />\r\n- Widze właśnie, jak dzieci bawią się w piaskownicy, widze babcię idącą z zakupami, psa srającego obok merola i innych ludzi chodzących po chodnikach. A, jeszcze jedno. Obok mnie na innym balkonie stoi dziewczynka. Pewnie dla tego, że jej rodzice też się pieprzą... ', '10', '1', 178, '10'),


No i w jaki sposób mógłbym sprawdzić czy jakiś kawał nie występuje dwa razy?
Myślałem nad tym aby napisać kod w php i sprawdzać np. 100 znaków w każdym, i jeśli są takie same, to po prostu dostaję komunikat, które kawały są takie same...
Dobrze by było aby np. ten kod nie zwracał uwagi na myślniki, czy <br> lub \r\n bo mogę być takie same kawały, a np. jeden ma myślnik a drugi nie..
I np. jeśli są kawały krótsze niż 100 znaków to aby kod sprawdzał np. tylko 50 pierwszych znaków..
W jaki sposób w ogóle zabrać się za napisanie takiego kodu?
Korab
Możesz najpierw pousuwać znaki specjalne, spacje itd.:
  1. preg_replace('/[^a-z0-9]/', '', $kawal);

, a rezultat przepuścić przez strtolower() i porównać.
sadistic_son
Sądzę, że to jest niewykonalne. Ile jest dowcipów mających identyczny fragment np. "Przychodzi baba do lekarza." albo "Pani mówi do Jasia(...)". Poza tym jeden i ten sam dowcip może być opowiedziany przy użyciu różnych słów i tego już nie wychwycisz za cholerę. Może się mylę ale podejrzewam, że tylko manualne sprawdzanie da pożądane efekty.
xamrex
Cytat(sadistic_son @ 22.09.2011, 18:19:46 ) *
Sądzę, że to jest niewykonalne. Ile jest dowcipów mających identyczny fragment np. "Przychodzi baba do lekarza." albo "Pani mówi do Jasia(...)". Poza tym jeden i ten sam dowcip może być opowiedziany przy użyciu różnych słów i tego już nie wychwycisz za cholerę. Może się mylę ale podejrzewam, że tylko manualne sprawdzanie da pożądane efekty.

Tak, wiem
Dlatego jeśli sprawdzę 100 znaków i będą się powtarzać, to che aby pojawiły się te kawały ( i wtedy ja ręcznie będę je sprawdzał)
Mogę być użyte różne słowa to fakt, tego nie wychwycę... ale przynajmniej część które będą sie powtarzały będę miał smile.gif

Cytat(Korab @ 22.09.2011, 18:17:45 ) *
, a rezultat przepuścić przez strtolower() i porównać.

Tylko w jaki sposób to porównywać?
Korab
Porównujesz to, co wpisał użytkownik, z wpisami z bazy danych.
Możesz dać np. 50 ostatnich znaków, a nie pierwszych - to a propos "przychodzi baba do lekarza...".
A i tak sadistic_son ma rację - wystarczy, że ten sam dowcip wklepią dwie osoby, absolwent polonistyki i mający ortografię w poważaniu internauta, i masz dwa KOMPLETNIE różne łańcuchy tekstowe.
Crozin
1. Najpierw oczyszczasz tekst ze wszystkich śmieci.
2. Możesz wykorzystać mechanizm wyszukiwania pełnotekstowego do określenia poziomu pokrewieństwa obu tekstów. Dokumentacja.
3. Zamiast blokować użytkownikowi możliwość dodania tekstu w przypadku wysokiego stopnia pokrewieństwa wyświetl mu znaleziony tekst i niech on sam zdecyduje czy są różne czy nie. Jeżeli uzna, że jednak są różne możesz mimo wszystko zapisać sobie informacje o dużym stopniu pokrewieństwa by móc łatwo samemu przejrzeć listę nowododanych tekstów mogących być duplikatami.
xamrex
Z oczyszczaniem to sobie prawie poradziłem..

Chodzi o to, że ja już mam około 6tys kawałów..
I chciałbym zrobić porządek, aby pousuwać te, które się powtarzają...
W jaki sposób mam to sprawdzic?
Crozin
Punkt drugi z mojego wcześniejszego postu.
xamrex
Ok, tylko ja dalej nie wiem w jaki sposób mam to porównywać:
mam np. taki kod
  1. SELECT * FROM `nuke_poems`
  2. WHERE MATCH (`name`,`poem`) AGAINST('idzie baba')


No i ok, wyszukuje kawały z idzie baba..

Tylko co ja mam przekazywać do parametru AGAINST?
Jak to porównywać, tego nie potrafię zrozumieć?


Takie coś udało mi się zrobić:
http://www.mini-gry.net/alegro/kod.php

Plik:
  1. <?php
  2. // laczenie z baza
  3.  
  4. $sql = 'SELECT poem FROM nuke_poems Order by poem ASC LIMIT 215';
  5. $query = mysql_query($sql);
  6. while($dane = mysql_fetch_array($query))
  7. {
  8. $zmienna=$dane['poem'];
  9. $zmienna=str_replace("<br />",'',$zmienna);
  10. $zmienna=str_replace("<br>",'',$zmienna);
  11. $zmienna=strtolower($zmienna);
  12. echo preg_replace('/[^0-9a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ]/', '', $zmienna);
  13. echo "<br>";
  14. }
  15.  
  16.  
  17.  
  18.  
  19. ?>


Już widać na pierwszy rzut oka, że 9 linijka jest 2 razy..
W jaki sposób napisać kod aby to wychwycił?
Crozin
1. Dlaczego różne słowa łączysz w jeden ciąg?
2. Jak już powiedziałem powinieneś sprawdzić stopień pokrewieństwa, a nie sam fakt jego występowania w jakimkolwiek stopniu. Innymi słowy dodaj sobie MATCH ... AGAINST do klauzuli SELECT, a zobaczysz konkretne wartości pokrewieństwa.
3. Wypadałoby porównywać całą treść nowego tekstu z już istniejącymi.
xamrex
Wielkie dzięki za nakierowanie, teraz juz sobie poradze
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.