页面上每个单词的出现次数

时间:2014-04-07 13:28:52

标签: php arrays full-text-search counting

我正在尝试计算页面上每个唯一单词的出现次数(想想你在woorank上看到的SEO'字数' - 但不是为了那个目的!)

我真的在努力解决这个问题: -

目前我正在考虑阅读每个单词,然后检查它是否对阵列是唯一的 - >如果使用occurences=>1将唯一添加到数组 - 那么如果我稍后找到相同的单词,则只需+1。

然而,这对于大块文本来说似乎非常麻烦和缓慢(特别是因为我将不得不删除逗号等,将所有内容转换为小写等) - >是否有更好的方法,有人为此任务获得了代码段或库吗?

为清楚起见

猫逃跑了。勺子已经和另一只猫走了很远的距离。

会屈服:

the => 3, away => 3, cat => 2, with => 2, far => 2, spoon => 1, hat => 1, ran => 1, run => 1, had => 1, another => 1, already => 1

提前致谢 - 如果没有更好的方法,那就没关系了!

ASIDE

我打算在找到并统计后对所有单词进行replace($word,"") - >但这看起来同样麻烦。

3 个答案:

答案 0 :(得分:3)

array_count_values()str_word_count()结合使用:

$wordCounts = array_count_values(str_word_count(strtolower($sentence), 1));
arsort($wordCounts);

输出:

Array
(
    [the] => 3
    [away] => 3
    [cat] => 2
    [far] => 2
    [with] => 2
    [run] => 1
    [another] => 1
    [already] => 1
    [hat] => 1
    [ran] => 1
    [spoon] => 1
    [had] => 1
)

Demo

答案 1 :(得分:0)

答案 2 :(得分:0)

拆分所有单词(您可以使用像Solr中的用户那样的“标记器”来“清理”它们),然后放入数组,对其进行排序,以及数组唯一计数。它实际上取决于语言,但使用自己迭代文本的语言本机函数总是会更快。

在php中:

$array = preg_split('/[\s,\.]+/', strtolower($text));
$unique = array_count_values($array);
print_r($unique);