ომედია სტუდია

ბლოგი ტეგების ღრუბლის გენერაცია

Tika
7 იანვარი, 2009  •  10 კომენტარი  •  წაკითხულია 12841-ჯერ

„ტეგების ღრუბელი“ ვებსაიტებზე სტატისტიკური მონაცემების ვიზუალიზაციის ერთ-ერთი ყველაზე გავრცელებული საშუალებაა. იგი ცნობილ ანარეკლებთან და წყვეტილ ხაზგასმებთან ერთად, ყბადაღებული Web 2.0-ის ცნობადი ტრენდია. იდეა მარტივია და შემდეგში მდგომარეობს: საწყისად ვიღებთ სიტყვების, ფრაზების ერთობლიობას და მათი გამოყენებების რაოდენობებს მთელ ვებსაიტზე. ამ რაოდენობების შედარებით, ყოველი ტეგისთვის ისაზღვრება ე.წ. „წონა“, ანუ, მისი გამოყენების სიხშირე და, შესაბამისად, აქტუალურობა. მათი ვიზუალური წარმოდგენისას კი, „წონა“ გამოიხატება თითოეული ტეგის ფონტის ზომაში და, ზოგ შემთხვევაში, ფერის ტონალობებშიც. ტეგი წარმოადგენს ბმულიან ტექსტს, ხოლო ტეგების ღრუბელი კი ამ სხვადასხვა ზომის ბმულების ერთობლიობაა.

ერთი შეხედვით არაფერი განსაკუთრებული ან რთული არ უნდა იყოს :) მაგრამ დამიჯერეთ, რომ დეტალებში საკმაოდ საინტერესო და სპეციფიური ამოცანაა. მოკლედ, საკითხი დაისმის ასე:

პირველ ეტაპზე, უნდა ავიღოთ ორი ტიპის მონაცემების მიმდევრობა: პირველი — ტეგები და მეორე — თითოეულის გამოყენების რაოდენობა ბლოგის პოსტებში ან სიახლეებში.
ამის შემდეგ ხდება მთავარი — რაოდენობების მაჩვენებლის გარდაქმნა მეორე ტიპის მახასიათებელში, რომელიც საბოლოო ჯამში შრიფტის ზომის განმსაზღვრელი იქნება, ყოველი ტეგისთვის.

როგორ კეთდება ეს ყველაფერი?

პირველი, რაც უნდა გავაკეთოთ, არის მონაცემების ამოღება. როგორ და საიდან მოვახდენთ ამას, გადამწყვეტი მნიშვნელობა არ აქვს  — მთავარია, რომ გვქონდეს სტრინგები და მათი გამოყენებების რაოდენობები :)

ზოგადად უნდა შესრულდეს რაიმე ასეთი ტიპის მოთხოვნა:

 
	SELECT tag, weight FROM `tags` ORDER BY RAND() LIMIT 50;
 

ასეთი ტიპის SQL მოთხოვნის შემდეგ, მონაცემთა ბაზიდან ავიღებთ 50 ცალ შემთხვევით ტეგს და weight-ს — მათი გამოყენებების რაოდენობებს. მშვენიერია :) ანუ სტატისტიკური მონაცემები გვაქვს. ახლა საჭიროა ამ მონაცემების ვიზუალურად წარმოდგენა.

ცხადია, რომ უნდა ავირჩიოთ პრინციპი, მეთოდი, რომლის მიხედვითაც განვსაზღვრავთ ტეგის გამოყენების რაოდენობის მიხედვით მის შესაბამის ფონტის ზომას. ლოგიკა გასაგებია, რაც უფრო ბევრჯერ არის ტეგი გამოყენებული, მით უფრო დიდი ზომის უნდა იყოს ის და პირიქით — ნაკლებად გამოყენებული ტეგი უფრო მცირე ზომის იქნება. ერთი შეხედვით, დამოკიდებულება ცალსახად წრფივი უნდა იყოს, ხომ? სწორედ ეს არის ამ პოსტის მთავარი თემა :)

წრფივი თუ ლოგარითმული ფუნქცია?

ზოგადად, ტეგების ღრუბლის გენერირებისას, გამოყოფენ ორ მეთოდს — წრფივსა და ლოგარითმულს. ანუ, ტეგის ფონტის ზომა მისი გამოყენების რაოდენობაზე წრფივად უნდა იყოს დამოკიდებული, თუ ლოგარითმულად. განსხვავება ამ ორ მეთოდს შორის ვიზუალურ შედეგში გამოიხატება.
წრფივი მეთოდის გამოყენებისას, თუ ტეგების გამოყენების რაოდენობებს შორის დიდი ნახტომებია, მიღებული შრიფტის ზომებით ღრუბელი ნაკლებად მიმზიდველი ხდება. ტეგიდან ტეგზე გადასვლა ზომაში ზედმეტად მკვეთრდება, ზოგიერთი ტეგი ზედმეტად დიდდება, ზოგი კი — საერთოდ იკარგება გიგანტების ჩრდილქვეშ.
ლოგარითმული დამოკიდებულებისას კი, ფონტის ზომებს შორის ცვლილება უფრო ნაკლებად საგრძნობია და ტეგების ნებისმიერი რაოდენობის, ასევე მათი გამოყენების რაოდენობებს შორის დიდი სხვაობის შემთხვევაშიც კი, ვღებულობთ ვიზუალურად უფრო ლამაზ და, ამასთანავე, რეალობის არანაკლებად წარმატებით ამსახველ სურათს.

ვისაც აინტერესებს, თუ რატომ ხდება ასე, ცოტათი მათემატიკასაც შევეხოთ :) მოკლედ, მათემატიკურად სიტუაცია არის ასეთი — თუ, ტეგის გამოყენების რაოდენობასა და ფონტის ზომას შორის დამოკიდებულება არის წრფივი, ეს ნიშნავს იმას, რომ ფონტის ზომას განვსაზღვრავთ წრფივი ფუნქციით, რომლის არგუმენტიც სწორედ ეს რაოდენობაა. ამ ფუნქციის გრაფიკის დახრილობა (ზოგადად, წრფივი ფუქნციის მახასიათებელი „საკუთხო კოეფიციენტი“) დამოკიდებულია სწორედ იმაზე, თუ რამდენად დიდია სხვაობა ტეგების გამოყენებებს შორის. შესაბამისად, თუ ეს შუალედი იქნება დიდი, მაშინ ჩვენი წრფივი ფუნქციით დათვლილ ფონტის ზომებს შორის განსხვავებაც მკვეთრი იქნება. უფრო „ჭკვიანური“ ტერმინებით რომ ვთქვათ, ფუნქციის ცვლილების სისწრაფე დიდი იქნება, რაც ამ არასასურველ შედეგს უზრუნველყოფს.

ლოგარითმული ფუნქციის შემთხვევაში კი სიტუაცია ბევრად უფრო მისაღებია :) წარმოიდგინეთ ლოგარითმის გრაფიკი და ყველაფერი გასაგები იქნება. ეს არის ზრდადი, მაგრამ „გლუვი“ ფუნქცია, რაც ტეგებს შორის ზომების ცვლილებას უფრო ნაკლებად მკვეთრად შესამჩნევს გახდის, ნებისმიერი ზომის ნახტომების შემთხვევაშიც კი.

შეგიძლიათ ჩაატაროთ ექსპერიმენტები და შეამოწმოთ :) მანამდე კი იხილეთ ეს ლინკი: http://www.tocloud.com/linearvslogarithmic.html

ღრუბლის შესაქმნელად საჭირო მეთოდის არჩევის შემდეგ, ვწერთ ალგორითმს. უნდა შესრულდეს დაახლოებით ასეთი მოქმედებები:

 
 
	// წრფივი შემთხვევა
	$weight = ($currentTagUses - $minUses) / ($maxUses - $minUses);
	$fontSize = $minFontSize + round(($maxFontSize - $minFontSize)*$weight, 2);
 
	// ლოგარითმული შემთხვევა
	$weight = (log($currentTagUses) - log($minUses)) / (log($maxUses) - log($minUses));
	$fontSize = $minFontSize + round(($maxFontSize - $minFontSize)*$weight, 2);
 
 

სადაც, $minUses და $maxUses ცვლადები განსაზღვრავენ კონკრეტულ მიმდევრობაში ტეგების გამოყენებების მაჩვენებლის მინიმუმსა და მაქსიმუმს, შესაბამისად.
$minFontSize და $maxFontSize კი, ის შუალედია, რომელშიც გვინდა, რომ დაგენერირდეს ფონტის ზომები, მინიმალური და მაქსიმალური მაჩვენებელი. გაითვალისწინეთ, რომ მიღებული შედეგები ნატურალური რიცხვები არ იქნება, ასერომ თქვენს მარკაპში შრიფტის ზომა em ერთეულით უნდა განისაზღვროს.

ზოგადი მოსამზადებელი და საბოლოო სამუშაოები კი (მონაცემების ამოღება და მიღებული შედეგებით საჭირო html-ის დაგენერირება) სტანდარტულია და თავს აღარ შეგაწყენთ :D კარგი იქნება, თუ მსგავს მეთოდს ისინი გამოცდით, ვისაც უკვე გაქვთ ტეგების ღრუბელი და წრფივ მეთოდს იყენებთ, საინტერესოა განსხვავებების ნათლად დანახვა.

ტეგები: ტეგი ტეგების ღრუბელი წრფივი ფუნქცია ლოგარითმი მათემატიკა სტატისტიკა

10 კომენტარი:

  • 13 ნოემბერი, 2009 - 17:04 ლუკა:
    ეს ღრუბლების ტეგი რა ჰოსტინგზეა?იუკოზზე,ვორდფრესზე თუ ჯოომლაზე თუ დლეზე?
  • 30 ნოემბერი, 2009 - 03:44 ლაშა:
    აქ ჰოსტინგი საერთოდ რაშუაშია?

    ეს ღრუბლების ტეგი რა ჰოსტინგზეა?იუკოზზე,ვორდფრესზე თუ ჯოომლაზე თუ დლეზე?

  • 3 თებერვალი, 2010 - 22:31 George:
    მე სხვა მეთოდს ვიყენებ:
    ბაზიდან მომაქვს ასე:

    SELECT id,tag, count FROM tags ORDER BY count DESC LIMIT 30

    ამის შემდეგ ვთქვათ გვაქვს გვაქვს 5 განსხვავებული ზომის შრიფტი ღრუბლისათვის.
    იმის მიხედვით თუ ტეგი საერთო რაოდენობის რომელ ნაწილშია თითოელ მათგანს მივანიჭებთ შესაბამის ზომას. მაგ: პირველ 5ს მივანიჭებთ მაქსიმალურს, შემდეგ 10ს შემდეგს და ასე შემდეგ. ან უბრალოდ პირველ 20%ს მაქსიმალურს, მეორე 20% შემდეგს და ა.შ.
    შემდეგ მასივს ვანჯღრევთ shuffle($tags_array) დაახლოებით ასე ან თუ გვინდა, რომ ტეგების თანმიმდევრობა ყოველთვის იყოს რეალური ანუ ბაზაში დამატების თარიღის მიხედვით ვიყენებთ ფუნქციას ksort($tag_array) - ოღონდ რა თქმა უნდა ბაზიდან წამოღების დროს $tags_array() უნდა შევავსოთ პრინციპით:
    $tags_array[$result['id']] = array('tag'=>$result['tag'],'count'=>$result['count']);
    ამ პრინციპით საკაიფო ღრუბლის მიღება შეიძლება... :)
  • 16 ივნისი, 2010 - 06:43 DiMiTRi:

    ეს ღრუბლების ტეგი რა ჰოსტინგზეა?იუკოზზე,ვორდფრესზე თუ ჯოომლაზე თუ დლეზე?


    რა კარგად გამაცინე კი არა და ჩამაბჟირე... საღოლ :D
  • 29 ივნისი, 2010 - 21:09 77ქქეეეეეეეეეეეეე:
    ბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბბ
  • 12 სექტემბერი, 2010 - 00:36 დაუოკებელი დღნაჩვი:
    მორჩხვი მაჩვის და სტაბილური ჟენოს შემქმნელებისგან>>)

    ეს ღრუბლების ტეგი რა ჰოსტინგზეა?იუკოზზე,ვორდფრესზე თუ ჯოომლაზე თუ დლეზე?


    არა გეშლება ეს მხოლოდ განჯა CMS ისთვის გამოიყენება მე ვიყენებ :) :დ
  • 22 აპრილი, 2011 - 18:06 შალვა ნათელაშვილი:
    რას გვიშვება ეს დედატრაკში აფეთქებული მთავრობა,
    ხალხი ისე გამოყლევდა ღრუბლები და ტეგები ელანდება
  • 9 სექტემბერი, 2011 - 11:14 afrosamuray:
    ოოპ ში საერტოდ არ ვხმარობ მგას :) დიდი ხანია თან სტანდარტული php იტ მუშაობა საკმაოდ მოზველებუ;ია :)
  • 14 სექტემბერი, 2011 - 19:53 გიორგი ჯიბლაძე:

    ოოპ ში საერტოდ არ ვხმარობ მგას :) დიდი ხანია თან სტანდარტული php იტ მუშაობა საკმაოდ მოზველებუ;ია :)


    ბატონოო? :D
  • 28 სექტემბერი, 2011 - 18:54 იიი:
    იიიი

კომენტარის დამატება:



დაშვებულია მხოლოდ <blockquote> ტეგი.

ელფოსტა არც გამოქვეყნდება და არც დაისპამება, მხოლოდ გრავატარებისთვისაა საჭირო :)

მონიშნული ტექსტის ციტირება

იგზავნება ...

გმადლობ, კომენტარი დამატებულია.

ამის ქვევით ნამდვილად აღარაფერია, სიტყვას გაძლევთ! :D
Omedia Studio