以下代码效果很好。它会创建字符串$commentstring
中出现的单词列表,按出现次数排序。它省略了$blacklist
中的数字和任何内容。
它将以标点符号结尾的单词视为唯一。因此,american
,american.
和american,
都被视为不同。无论是否以标点符号结尾,我怎样才能使文字相同?
$words = explode(" ", $commentstring);
$result = array();
arsort($words);
foreach($words as $word) {
if(!is_numeric($word)){
$result[$word]++;
arsort($result);
}
}
echo "<table>";
$blacklist = array($submission, 'DESPITE', 'FARE', 'DECENT', 'AMAZING', 'WOULD', 'DISLIKE', 'HATE', 'OKAY', 'JUST', 'NOTHING', 'CURRENTLY', 'BASICALLY', 'BIT', 'COME', 'WANT', 'TOO', 'HERE', 'EATING', 'EAT', 'WAS', 'TRIED', 'TRY', 'MAKES', 'HAS', 'EVEN', 'THINK', 'BETTER', 'YET', 'MORE', 'LOVE', 'WHILE', 'WHERE', 'WRONG', 'FIND', 'EVER', 'RIGHT', 'BEST', 'HAVE', 'WE', 'WAY', 'GREAT', 'NICE', 'HOW', 'RESTAURANTS', 'RESTAURANT', 'EXCELLENT', 'FORGET', 'THEY', 'REALLY', 'MISS', 'VERY', 'LOOKING', 'YOU\'LL', 'CAN\'T', 'WON\'T', 'PLACE', 'ABOUT', 'FOR', 'MOST', 'GOOD', 'CAN', 'GET', 'THING', 'DON\'T', 'BY', 'YOUR', 'BE', 'YOU', 'BRING', 'THAT\'S', 'LITTLE', 'OTHER', 'MANAGES', 'ATE', 'ATE', 'EAT', 'SO', 'SOMEHOW', 'MAKE', 'ALL', 'UP', 'THEM', 'AS', 'THEM', 'YOU\'RE', 'WILL', 'ONLY', 'IF', 'GO', 'DO', 'I\'VE', 'HAD', 'TO', 'SOME', 'FOOD', 'THIS','DOES', 'NOT', 'IT.', 'IT,', 'SEEM', 'END', 'THERE\'S', 'WHETHER', 'DOUBT', 'WHAT', 'WHICH', 'RECOMMEND', 'THE', 'IS', 'A', 'IT\'S', 'OUT', 'JAN', 'IT', 'IT', 'IT', 'LIKE', 'THAN', 'WITH', 'SEEMS', 'WHICH', 'THAT', 'SAY', 'AT', 'ON', 'AN', 'BUT', 'APART', 'STILL', 'ARE', 'OR', 'TEST', 'IN', 'IT', 'AND', 'SET', 'TO', 'NO', 'OF', '', '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', 'AA', 'BB', 'CC', 'DD', 'EE', 'FF', 'GG', 'HH', 'II', 'JJ', 'KK', 'LL', 'MM', 'NN', 'OO', 'PP', 'QQ', 'RR', 'SS', 'TT', 'UU', 'VV', 'WW', 'XX', 'YY', 'ZZ');
foreach($result as $word => $count1)
{
if (in_array($word, $blacklist)) continue;
echo '<tr>';
echo '<td>';
echo "$word";
echo '</td>';
echo '<td>';
echo "$count1 ";
echo '</td>';
echo '</tr>';
}
echo "</table>";
答案 0 :(得分:1)
freefaller解决方案的一个替代方案就是在你对字符串进行标记之前删除所有要删除的标点符号。
$text = str_replace(array('.',',',':'), '', $commentstring);
$words = explode(' ', $text);
答案 1 :(得分:0)
你考虑过使用正则表达式吗? 查看preg函数(例如preg_match_all)和\ b [\ w] * \ b
行的模式答案 2 :(得分:0)
为简单起见,最简单的方法是从单词中删除任何前导和尾随标点符号,然后将其与&#34;黑名单&#34;的列表进行比较。词语的
爆炸后,插入以下内容:
foreach ($words as &$w) { $w = preg_replace('/\W/', '', $w); }
它迭代$words
中的所有条目,并通过删除任何非单词字符来修改它们。 A&#34;字&#34;字符是A-Za-z0-9和下划线(如果我没记错的话)。
另外,为了提高效率,请将arsort($result);
移到它的foreach循环之外。它保证它会运行一次,这比你处理的每个单词可能运行一次要好。