PHP:查找字符串或数组中出现频率最高的单词


PHP: Find the most frequent word(s) appeared in a String or Array

我知道我可以用这种方法找到数组中最频繁的元素:

(如果我错了,请纠正我)

$array = array('good', 'good', 'good', 'cool');     
$array = array_count_values($array);
$array = array_keys($array);
$element = $array[0]

如果我想找到最频繁的单词而不是最频繁的元素:

(在这种情况下,它将是单词appleme

$array = array('apple bb','cc apple','d','ccc ab','apple ccccc','cc cccc me me me')

如果我首先使用implode将数组转换为字符串,

我怎样才能用最简单的方法找到它/它们?

在没有implodeexplode的情况下,我还能用什么方法找到它?

最好的方法是这样,正如您提到的implode()explode()

$array = array('apple bb','cc apple','d','ccc ab','apple ccccc','cc cccc');
$array2 = array_count_values(explode(' ', implode(' ', $array)));
echo key($array2);

在字符串或数组中查找最频繁/重复单词的一种工作方法。使用PHP

字符串中,

<?php
$str = "hi its me . hi its me .hello its me hi";
$array = explode(" ",$str);
$array = array_count_values($array);
arsort($array);
$highest = current($array);
foreach($array as $key=>$value)
    if($value == $highest)
        $repeat[] = $key;
?>

这里$repeat[]包含字符串中重复次数最多的单词。

不知道问题的第二部分,第一部分是我在WebDeveloper 上找到的一个函数

function array_most_common($input) 
{ 
  $counted = array_count_values($input); 
  arsort($counted); 
  return(key($counted));     
}

str_word_count()处理字符串,这意味着您只需要内爆,而不需要再次内爆:使用第二个参数1将计算每个单词的出现次数。它最大的优点是在拆分句子时考虑了标点符号。

试试这个:

<?php
function getMostFrequentInArray($array)
{
   // e.g. $array = array('apple bb','cc apple','d','ccc ab','apple ccccc','cc cccc');
   $token_array = array();
   for ($array as $item)
   {
        $token_array[] = explode(" ",$item);
   }
   $array_by_frequency = array_count_values($token_array);
   $element = $array_by_frequency[0];
   return $element;
}
?>
function highfreqwords($arr){
    $counts = array_count_values(str_word_count(implode(" ",$arr),1));
    arsort($counts);
    return $counts;
}

算法

  • 把你的一组句子串成一个长句
  • 使用str_word_count(array,1)返回那个大句子中的所有单词
  • 使用array_count_values(array)对所有值进行计数
  • 使用arsort()按降序缩短关联数组