1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183
| <?php
if (!function_exists('mb_str_word_count'))
{
function mb_str_word_count($string, $format = 0, $charlist = '[]') {
$string=trim($string);
if(empty($string))
$words = array();
else
$words = preg_split('~[^\p{L}\p{N}\']+~u',$string);
switch ($format) {
case 0:
return count($words);
break;
case 1:
case 2:
return $words;
break;
default:
return $words;
break;
}
}
}
/* --- BEGIN PHP CODE --- */
$stopwords = "0,1,2,3,4,5,6,7,8,9,est,ce,pour,ces,se,par,entre,de,que,la,le,les,dans,des,qui,du,au,en,aux,et,able,about,above,according,accordingly,across,actually,after,afterwards,again,against,ain't,all,allow,allows,almost,alone,along,already,also,although,always,am,among,amongst,an,and,another,any,anybody,anyhow,anyone,anything,anyway,anyways,anywhere,apart,appear,appreciate,appropriate,are,aren't,around,as,aside,ask,asking,associated,at,available,away,awfully,be,became,because,become,becomes,becoming,been,before,beforehand,behind,being,believe,below,beside,besides,best,better,between,beyond,both,brief,but,by,c'mon,c's,came,can,can't,cannot,cant,cause,causes,certain,certainly,changes,clearly,co,com,come,comes,concerning,consequently,consider,considering,contain,containing,contains,corresponding,could,couldn't,course,currently,definitely,described,despite,did,didn't,different,do,does,doesn't,doing,don't,done,down,downwards,during,each,edu,eg,eight,either,else,elsewhere,enough,entirely,especially,et,etc,even,ever,every,everybody,everyone,everything,everywhere,ex,exactly,example,except,far,few,fifth,first,five,followed,following,follows,for,former,formerly,forth,four,from,further,furthermore,get,gets,getting,given,gives,go,goes,going,gone,got,gotten,greetings,had,hadn't,happens,hardly,has,hasn't,have,haven't,having,he,he's,hello,help,hence,her,here,here's,hereafter,hereby,herein,hereupon,hers,herself,hi,him,himself,his,hither,hopefully,how,howbeit,however,i'd,i'll,i'm,i've,ie,if,ignored,immediate,in,inasmuch,inc,indeed,indicate,indicated,indicates,inner,insofar,instead,into,inward,is,isn't,it,it'd,it'll,it's,its,itself,just,keep,keeps,kept,know,knows,known,last,lately,later,latter,latterly,least,less,lest,let,let's,like,liked,likely,little,look,looking,looks,ltd,mainly,many,may,maybe,me,mean,meanwhile,merely,might,more,moreover,most,mostly,much,must,my,myself,name,namely,nd,near,nearly,necessary,need,needs,neither,never,nevertheless,new,next,nine,no,nobody,non,none,noone,nor,normally,not,nothing,novel,now,nowhere,obviously,of,off,often,oh,ok,okay,old,on,once,one,ones,only,onto,or,other,others,otherwise,ought,our,ours,ourselves,out,outside,over,overall,own,particular,particularly,per,perhaps,placed,please,plus,possible,presumably,probably,provides,que,quite,qv,rather,rd,re,really,reasonably,regarding,regardless,regards,relatively,respectively,right,said,same,saw,say,saying,says,second,secondly,see,seeing,seem,seemed,seeming,seems,seen,self,selves,sensible,sent,serious,seriously,seven,several,shall,she,should,shouldn't,since,six,so,some,somebody,somehow,someone,something,sometime,sometimes,somewhat,somewhere,soon,sorry,specified,specify,specifying,still,sub,such,sup,sure,t's,take,taken,tell,tends,th,than,thank,thanks,thanx,that,that's,thats,the,their,theirs,them,themselves,then,thence,there,there's,thereafter,thereby,therefore,therein,theres,thereupon,these,they,they'd,they'll,they're,they've,think,third,this,thorough,thoroughly,those,though,three,through,throughout,thru,thus,to,together,too,took,toward,towards,tried,tries,truly,try,trying,twice,two,un,under,unfortunately,unless,unlikely,until,unto,up,upon,us,use,used,useful,uses,using,usually,value,various,very,via,viz,vs,want,wants,was,wasn't,way,we,we'd,we'll,we're,we've,welcome,well,went,were,weren't,what,what's,whatever,when,whence,whenever,where,where's,whereafter,whereas,whereby,wherein,whereupon,wherever,whether,which,while,whither,who,who's,whoever,whole,whom,whose,why,will,willing,wish,with,within,without,won't,wonder,would,would've,wouldn't,yes,yet,you,you'd,you'll,you're,you've,your,yours,yourself,yourselves,zero,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,??,???,???,??,??,???,??,?????,?,????,????,????,?????,???,????????,????,????????,???????,??????,????,????,????,???,????,????,??????,???,???,????,??,???,????,???,???,????,?????,?????,??????,???,???,???,?????,??,?????,???,???,?????,???,?????,?????,????,???,????,????,??,??,???,???,????,???,???,????,???,???,???,?????,???????,?????,????,???,??,????,?????,?????,????,???,??,?????,?????,??,???????,??????,??????,???????,???,??,??,??????,?????,???,?,????,????,????,??????,???,??,?????,????,???,????,??????,????????,??,?????,???,???,????,??,وايضا,و,ايضا,أسفل,أمام,أولئك,إلا,باستثناء,باسم,بالإضافة,بالخارج,بالقرب,بحسب,بدلا,بدون,بعد,بعيد,بقدر,بواسطة,حتى,ذلك,زائد,ضد,ضمن,طريق,عبر,عكس,غاية,قريبة,كلمات,كلمتين,كما,لكل,لكن,مامثل,مع,مقابل,منذ,نحو,هؤلاء,هذا,وكذلك,بجانب,بسبب,بين,خارج,خلال,عن,في,قبل,قرب,وراء,تحت,حول,داخل,إلى,على,فوق,إضافة,الامثله,الامر,اولا,بعد,بل,تاتي,تستدم,ثانيا,ضمير,عدا,عن,قائمة,كلأتي,لا,لاإضافة,لاعطاء,لتسمية,للتاكيد,ليس,ما,مع,نستخدم,نهاية,هذا,و,وفقط,ولكن,يعني,المثال,اما,او,بداية,سبيل,علي,مثلا,الجملة,بالاضافة,في,علاوة,على,ذلك,ايضا,من,أن,التي,أ,ب,ت,ث,ج,ح,خ,د,ذ,ر,ز,س,ش,ص,ض,ط,ظ,ع,غ,ف,ق,ك,ل,م,ن,ه,ة,و,ي,ا,٠,*,آ,ؤ,ئ,ء,إ,.,١,٢,٣,٤,٥,٦,٧,٨,٩,+,-,ان,مى,أو";
$stopwords = explode(",", $stopwords);
/* Builds an array of words with all stop words filtered out. (case-insensitive) */
function filter_stopwords($words, $stopwords) {
foreach ($words as $pos => $word) {
if (!in_array(strtolower($word), $stopwords, TRUE)) {
$filtered_words[$pos] = $word;
}
}
return $filtered_words;
}
/* Builds an array of words as keys and their frequency as the value. (case-insensitive) */
function word_freq($words) {
$frequency_list = array();
foreach ($words as $pos => $word) {
$word = strtolower($word);
if (array_key_exists($word, $frequency_list)) {
++$frequency_list[$word];
}
else {
$frequency_list[$word] = 1;
}
}
return $frequency_list;
}
/* Optional function to filter out words below a specific frequency. */
function freq_filter($words, $filter) {
return array_filter(
$words,
function($v) use($filter) {
if ($v >= $filter) return $v;
}
);
}
/* Builds the word cloud and returns a string containing a div of the word cloud. */
function word_cloud($words, $div_size = 400) {
$tags = 0;
$cloud = "<div style=\"width: {$div_size}px\">";
/* This word cloud generation algorithm was taken from the Wikipedia page on "word cloud"
with some minor modifications to the implementation */
/* Initialize some variables */
$fmax = 96; /* Maximum font size */
$fmin = 8; /* Minimum font size */
$tmin = min($words); /* Frequency lower-bound */
$tmax = max($words); /* Frequency upper-bound */
foreach ($words as $word => $frequency) {
if ($frequency > $tmin) {
$font_size = floor( ( $fmax * ($frequency - $tmin) ) / ( $tmax - $tmin ) );
/* Define a color index based on the frequency of the word */
$r = $g = 0; $b = floor( 255 * ($frequency / $tmax) );
$color = '#' . sprintf('%02s', dechex($r)) . sprintf('%02s', dechex($g)) . sprintf('%02s', dechex($b));
}
else {
$font_size = 0;
}
if ($font_size >= $fmin) {
$cloud .= "<span style=\"font-size: {$font_size}px; color: $color;\"><a href='#'>$word</a></span> ";
$tags++;
}
}
$cloud .= "</div>";
return array($cloud, $tags);
}
if (strtoupper($_SERVER['REQUEST_METHOD']) == 'POST' && $_POST['tags'] != '') {
/* If the request verb is POST and the appropriate field is supplied and isn't
empty, we will attempt to generate the word cloud. */
$text = $_POST['tags']; /* Get the posted text */
$words = mb_str_word_count($text, 1); /* Generate list of words */
$word_count = count($words); /* Word count */
$unique_words = count( array_unique($words) ); /* Unique word count */
$words_filtered = filter_stopwords($words, $stopwords); /* Filter out stop words from the word list */
$word_frequency = word_freq($words_filtered); /* Build a word frequency list */
/* Optionally, you can filter out words below a specific frequency... Uncomment the line below to do so */
/* $word_frequency = freq_filter($word_frequency, 3); */
$word_c = word_cloud($word_frequency); /* Generate a word cloud and get number of tags */
$word_cloud = $word_c[0]; /* The word cloud */
$tags = $word_c[1]; /* The number of tags in the word cloud*/
}
else {
/* Otherwise there is nothing to do... */
$text = "";
$word_count = $unique_words = $tags = 0;
$word_cloud = null;
}
/* --- END PHP CODE --- */
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Tags</title>
</head>
<body>
<form action="" method="post">
<textarea name="tags" rows="7" cols="140" class="input-long"><?php if (isset($_POST['tags'])) echo $_POST['tags'] ; ?></textarea>
<br />
<input class="submit-green" name="ok" type="submit" value="Tags" />
</form>
<?php
$tags="";
if (isset($_POST['tags'])){
$tags=$_POST['tags'];
}
echo "<p>";
echo $word_cloud;
echo "</p>";
?>
</body>
</html> |
Partager