Русский Word Clouds

Автор daedal, 12 ноября 2007, 10:44:27

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

daedal

в одном из сниппетов тини-портала есть простой вывод наиболее употребляемых слов в постах. они выводятся разной высоты согласно их весу. ну все наверное видели это дела в разного рода блогах. вещь очень полезная на самом деле, думаю многим бы пригодилась на форуме. но вот ключи хотелось бы поточнее чтобы отслеживало. с учетом разных русских падежей например и выбирать только существительные. в идеале хотелось бы настраивать конкретные разделы, категории, а то и топики для обработки этого дела, хотябы админами.

как вам такое дело? сможем ли мы сделать толковый русский мод для него?

global $db_prefix;
$number_of_words = 30;
$min_length = 5;

// This is the list of words to exclude from your cloud
  $exclude_words = array(
    '@http://@',
    '@ about @',
    '@ also @',
    '@ because @',
    '@ been @',
    '@ cant @',
    '@ could @',
    '@ didnt @',
    '@ doesnt @',
    '@ dont @',
    '@ even @',
    '@ from @',
    '@ going @',
    '@ have @',
    '@ havent @',
    '@ here @',
    '@ http_request @',
    '@ into @',
    '@ its @',
    '@ just @',
    '@ like @',
    '@ look @',
    '@ make @',
    '@ many @',
    '@ more @',
    '@ much @',
    '@ must @',
    '@ need @',
    '@ should @',
    '@ shouldnt @',
    '@ some @',
    '@ someone @',
    '@ such @',
    '@ the @',
    '@ take @',
    '@ that @',
    '@ their @',
    '@ then @',
    '@ there @',
     '@ theres @',
   '@ these @',
    '@ they @',
    '@ this @',
    '@ this @',
    '@ want @',
    '@ well @',
    '@ were @',
    '@ what @',
    '@ when @',
    '@ where @',
    '@ which @',
    '@ will @',
    '@ with @',
    '@ without @',
    '@ would @',
    '@ wouldnt @',
    '@ your @',
    '@ youre @'
  );

// Various punctuation that should be filtered from the cloud
  $exclude_symbs = array('@[0-9]@','@\.@','@\,@','@\:@','@"@','@\?@','@\(@','@\)@','@\!@','@\/@','@\&@');
  $apostrophe = '&#'. '39;';
  $exclamation = '&#'. '33;';
  $nbsp = 'nb' . 'sp;';
  $quot = 'qu' . 'ot;';

// Reset our class globals and other variables
  $cloudy = '';
  $word_list = array();
  $cnt = 0;
  $high_count = 0;
  $low_count = 0;
  $totalwords = '';

  $query = db_query(
    "SELECT body
     FROM {$db_prefix}messages AS mess
     LEFT JOIN {$db_prefix}boards AS board
     ON mess.ID_BOARD = board.ID_BOARD
     ORDER BY posterTime DESC
     LIMIT 100", __FILE__, __LINE__);

  while ($row = mysql_fetch_assoc($query))
  {
    $words = $row['body'];
    $words = parse_bbc($words,1);
    $words = strip_tags($words); // Clean HTML tags
    $words = strtolower($words); // Make all words lower case
    $words = str_replace($apostrophe,'',$words); // remove apostrophes
    $words = str_replace($exclamation,'',$words); // remove exclamations
    $words = str_replace($nbsp,'',$words); // remove non-breaking space
    $words = str_replace($quot,'',$words); // remove quote
    $words = preg_replace($exclude_symbs, ' ', $words); // Strip excluded symbols
    $words = preg_replace($exclude_words, ' ', $words); // Strip excluded words
    $words = preg_replace('/\s\s+/', ' ', $words); // Strip extra white space
    $totalwords .= $words;
  }
  $words = '';
  $wordslist = explode(' ', $totalwords); // Turn it back into an array
  $word_count = array_count_values($wordslist); // Count word usage

// Clear out the big array of words.
  arsort($word_count); // Sort the array by usage count

// Here we build our smaller array of words that will be used.
  foreach ($word_count as $key => $val) {
    if (strlen($key) >= $min_length) {
      if ($high_count == 0)
        $high_count = $val;
      $word_list[$key] = $val;
      $cnt++;
    }
    if ($cnt >= $number_of_words) {
      $low_count = $val;
      break;
    }
  }


// Get the high and low, and calculate the range.
// This is used to weight the size of the words

  $range = ($high_count - $low_count) / 5;

// start form
echo '<script language="JavaScript" type="text/javascript">
<!--
function searchfromcloud ( selectedtype )
{
  document.scl.search.value = selectedtype ;
  document.scl.submit() ;
}
-->
</script>
<div style="text-align: center"><form name="scl" action="http://dreamhackers.ru/index.php?action=search2" method="post">
<input type="hidden" name="advanced" value="0"><input type="hidden" name="sort" value="ID_MSG|desc"><input type="hidden" name="search">

';

// Sort the array randomly for the cloud
  $random = array_rand($word_list, $number_of_words);
// Build the cloud's HTML
  foreach ($random as $value) {
    $fsize = intval($word_list[$value] / $low_count) *4;
    $fsize = $fsize + 3;
    if ($fsize > 17) { $fsize= 17; }
echo '<a href="javascript:searchfromcloud(\''.$value .'\')" style="font-size:' . $fsize . 'pt;">' . $value . '</a> ';
  }
echo '</form></div>';