//下面是中文分词函数 function ChineseWordSegment($str){ $words = array(); //utf-8 编码的正则,分别意思是: 英文符号与空格|英文及数字|汉字范围一|汉字范围二 //汉字占三个字符 $pa = "/[[:punct:]|\\s_]+|[a-z0-9]+|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]/mi"; //若网站是 gb2312 编码,则汉字占两个字符,正则应改为 //$pa = "/[[:punct:]|\\s_]+|[a-z0-9]+|[\x80-\xff]{2}/mi"; //排除汉字中的符号 $punctcn = "~!·#¥%…—*()—+{}[]|、;:‘’“”,。《》?/ "; //按正则把$str分割成数组 $r //$r元素的值可能为:一串英文符号与空格,一串英文及数字,一个汉字或汉字符号 preg_match_all($pa,$str,$r); $lv = ''; //把相临的2个汉字组成一个"词" foreach($r[0] as $k=>$v) { //如果不是汉字 //过滤掉英文符号或空格,单个字母或数字 //不和前一个元素组合,而自成一个"词" if(ord($v[0])<128){ if(preg_match('/^[a-z0-9]{2,}$/i',$v)) $words[] = $v; $lv = ''; continue; } //如果是汉字符号,过滤掉,不组"词" if(strrchr($punctcn,$v)){ $lv = ''; continue; } //汉字,和前一个汉字组成一个"词" if($lv) $words[] = $lv.$v; $lv = $v; } return $words; } //计算一个词语在内容中出现的次数 function showtimes($word,$content){ $nc = str_replace("$word","",$content); return (strlen($content)-strlen($nc))/strlen($word); }