Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [solved] Tagi - Matematyka
eai
post
Post #1





Grupa: Zarejestrowani
Postów: 367
Pomógł: 10
Dołączył: 20.05.2005

Ostrzeżenie: (0%)
-----


Według jakiego wzoru wyliczanie rangę popularności tagów?

Borykam się z problemem, jeśli częstotliwość danego tagu nie przekroczy lub nie będzie równa liczbie najwyższej rangi to nie wykorzystam najniższej rangi:

Wzór:

Rangę mam od 1 do 9;
ranga tagu = (ilość wystąpień taga/maksymalna ilość wystąpień) * ranga;

Przykładowo:
ilość wystąpień taga = 1
maksymalna ilość wystąpień = 3
ranga = 9

ranga tagu = (1/3)*9;
ranga tagu = 2.9 = 3;

W przypadku gdy jest tylko wykorzystany zakres 1-3 nie dojdziemy do najniższego zakresu 1.
Gdyby jeden tag zawierał 9 przypisań, zostanie w pełni wykorzystany zakres 1-9, pod warunkiem że najmniej popularny tag będzie miał tylko 1 przypisanie.


Czy ktoś oblicza to w inny sposób?

Ten post edytował eai 5.09.2008, 10:17:52
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
SHiP
post
Post #2





Grupa: Zarejestrowani
Postów: 697
Pomógł: 47
Dołączył: 19.12.2003
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Nie wiem czy o to Ci chodzi, dziwnie to wytłumaczyłeś. Na szybkiego wymyśliłem coś takiego

  1. <?php
  2. $tag = 10; // ilosc wystapien danego tagu
  3. $all = 21; // ilosc wystapien wszystkich tagow
  4. $allranks = 10; // skala rang (tutaj od 1 do 10)
  5.  
  6. $ranga = ($tag==0) ? 0 : ceil($allranks*($tag/$all));
  7. echo '<h1>'.$ranga.'</h1>';
  8. ?>
Go to the top of the page
+Quote Post
Speedy
post
Post #3





Grupa: Zarejestrowani
Postów: 651
Pomógł: 28
Dołączył: 4.12.2004

Ostrzeżenie: (0%)
-----


Na tym forum w dziale "Oceny" pojawiła się kiedyś ciekawa klasa do tworzenia chmury tagów. Poszukaj (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) .
Go to the top of the page
+Quote Post
bim2
post
Post #4





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


jak pamiętam to Balon'a (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Szybciej znajdziesz
Go to the top of the page
+Quote Post
eai
post
Post #5





Grupa: Zarejestrowani
Postów: 367
Pomógł: 10
Dołączył: 20.05.2005

Ostrzeżenie: (0%)
-----


znalazłem http://forum.php.pl/index.php?showtopic=52852

jednak nie jest ona doskonała, jak wyprowadze odpowiedni wzór napisze w temacie.
gdyby jednak ktoś już to rozwiązał proszę o info.

jeszcze jedno wyjaśnienie:

dane które są znane to:
1. największa ilość wystąpień jednego taga
2. najmniejsza ilość wystąpień jednego taga
3. ilość tagów
4. ilość wystąpień przetwarzanego tagu

rezultatem wzoru ma być numer wybranego zakresu od x do y, który odpowiada skali popularności tagu czyli:
najmniej popularny tag = x najbardziej popularny tag = y. to wszystko ma być wyliczone z 1 wzoru.

wiem że się da (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) czeka mnie dzisiaj troche matmy (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Speedy
post
Post #6





Grupa: Zarejestrowani
Postów: 651
Pomógł: 28
Dołączył: 4.12.2004

Ostrzeżenie: (0%)
-----


Miałem na myśli to: http://forum.php.pl/index.php?showtopic=68963 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) .
Go to the top of the page
+Quote Post
eai
post
Post #7





Grupa: Zarejestrowani
Postów: 367
Pomógł: 10
Dołączył: 20.05.2005

Ostrzeżenie: (0%)
-----


http://phpfi.com/247653
http://athlan.pl/jak-zrobic-tagi/


  1. <?php
  2. $range = ceil((($iTagCount * 100) / $iMaxTag) / ceil(100 / $this->_iLevels));
  3. ?>


Athlan troche przekombinował z tym wzorem


Ten sam efekt daje mój wzór:
  1. <?php
  2. $range = round(($iTagCount/$iMaxTag)*$this->_iLevels);
  3. ?>



Wzorowi natomiast brakuje jednej wiadomej: $iMinTag tylko nie wiem jak ją podstawić, w moim wzorze oraz wzorze Athlana przyjmuje się że najmniejsze wystąpienie = 1, co nie jest prawdą bo najmniej popularny tag może mieć 3 wystąpienia.

$this->_iLevels = 9 (rangi od 1 do 9)
$iMaxTag = 9 (najbardziej popularny tag = 9)
$iTagCount = 3 (najmniej popularny tag = 3)

$range = 3;

a ze wzoru powinniśmy dostać 1 ponieważ ten tag jest najmniej popularny.



Znalazłem rozwiązanie:
  1. <?php
  2.  
  3. /**
  4.  * Zwraca popularność tagu według skali
  5.  *
  6.  * @param integer $frequency częstotliwość przetwarzanego tagu
  7.  * @param integer $frequency_min najmniejsza częstotliwość
  8.  * @param integer $frequency_max największa częstotliwość
  9.  * @param integer $range_min minimalna ranga
  10.  * @param integer $range_max maksymalna ranga
  11.  * @param integer $step skok rangi
  12.  * @return integer
  13.  */
  14. function calculate ($frequency = 1, $frequency_min = 1, $frequency_max = 1, $range_min = 1, $range_max = 9, $step = 1)
  15. {
  16. $scaleFactor = ($frequency-$frequency_min)/($frequency_max-$frequency_min);
  17. $range  = $range_max - $range_min;
  18.  
  19. return $range_min + ($step * floor($scaleFactor*($range/$step)));
  20. }
  21.  
  22.  
  23.  
  24. /** ---TESTY---- **/
  25.  
  26. $frequency_min = 6;
  27. $frequency_max = 87;
  28.  
  29. $range_min = 1;
  30. $range_max = 9;
  31. $step = 1;
  32.  
  33.  
  34. # Przykład 1 (najmniej popularny tag)
  35. $frequency = 6;
  36. echo calculate ($frequency, $frequency_min, $frequency_max, $range_min, $range_max, $step);
  37. // 1
  38.  
  39. # Przykład 2 
  40. $frequency = 18;
  41. echo calculate ($frequency, $frequency_min, $frequency_max, $range_min, $range_max, $step);
  42. // 2
  43.  
  44. # Przykład 3 
  45. $frequency = 28;
  46. echo calculate ($frequency, $frequency_min, $frequency_max, $range_min, $range_max, $step);
  47. // 3
  48.  
  49. # Przykład 4 
  50. $frequency = 56;
  51. echo calculate ($frequency, $frequency_min, $frequency_max, $range_min, $range_max, $step);
  52. // 5
  53.  
  54. # Przykład 5 (najbardziej popularny tag)
  55. $frequency = 87;
  56. echo calculate ($frequency, $frequency_min, $frequency_max, $range_min, $range_max, $step);
  57. // 9
  58.  
  59. ?>


Teraz tylko zlepić klasę i dać do oceny (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Ten post edytował eai 5.09.2008, 10:09:22
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 18.10.2025 - 13:14