Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 页面上每个单词的出现次数_Php_Arrays_Full Text Search_Counting - Fatal编程技术网

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

Php 页面上每个单词的出现次数,php,arrays,full-text-search,counting,Php,Arrays,Full Text Search,Counting,我试图计算页面上每个独特单词的出现次数(想想你在woorank等网站上看到的SEO“单词计数”——但不是为了这个目的!) 我真的在为如何设置这一点而挣扎:- 目前,我正在考虑阅读每个单词,然后检查它在数组中是否唯一->如果唯一,则使用occurrences=>1将其添加到数组中,然后如果我稍后找到相同的单词,则只需+1即可 然而,对于大文本块来说,这似乎非常麻烦和缓慢(特别是当我必须去掉逗号等,将所有字符转换为小写等)-->是否有更好的方法,是否有人为此任务准备了代码片段或库 为了清楚起见 猫带

我试图计算页面上每个独特单词的出现次数(想想你在woorank等网站上看到的SEO“单词计数”——但不是为了这个目的!)

我真的在为如何设置这一点而挣扎:-

目前,我正在考虑阅读每个单词,然后检查它在数组中是否唯一->如果唯一,则使用
occurrences=>1将其添加到数组中,然后如果我稍后找到相同的单词,则只需+1即可

然而,对于大文本块来说,这似乎非常麻烦和缓慢(特别是当我必须去掉逗号等,将所有字符转换为小写等)-->是否有更好的方法,是否有人为此任务准备了代码片段或库

为了清楚起见

猫带着帽子跑了。汤匙已经和另一只猫跑得很远了

将产生:

the=>3,
客场=>3,
cat=>2,
如果=>2,
far=>2,
勺子=>1,
hat=>1,
ran=>1,
运行=>1,
had=>1,
另一个=>1,
已经=>1

提前感谢-如果没有更好的方法,那就好了

旁白


我打算在找到并计数的所有单词上执行
replace($word,”)
,但这似乎同样麻烦。

看看这篇文章:

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

在php中:

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

输出:

数组
(
[the]=>3
[离开]=>3
[猫]=>2
[far]=>2
[与]=>2
[运行]=>1
[另一个]=>1
[已经]=>1
[帽子]=>1
[ran]=>1
[勺子]=>1
[had]=>1
)

不确定如何做(但那是你的工作),但你当然可以在代码中使用
substr\u count()
str\u word\u count()
之类的函数。这样的指针总是有用的,但是的-同样的感觉,不知道如何在没有“蛮力”的情况下做到这一点:-PJquery word replace用于询问如何计算页面上所有单词的出现次数的问题-不要认为您阅读了整个问题,亲爱的:-P但感谢您提醒我该插件-正在尝试为其他内容查找它!没问题-我不是一个有-1个扳机手指的愤怒的孩子-就像我在寻找插件时偶然说的那样:-谢谢你不过有一个简单的问题,我是否应该在进行计数之前进行排序?这不是更快吗?而且我想我仍然需要转换成小写字符串,以确保
等一起计算?@GrahamRitchie:排序是完全可选的。不,在进行计数之前进行排序将不起作用,因为
array\u count\u value
将对数组中的项目重新排序。此外,在执行此操作之前,您可以简单地将整个句子转换为小写。看到我的更新答案(和演示)。干杯,亲爱的-正如我所想,但我真的很笨,没有考虑数组计数值->所以尝试手动执行:-P+1并接受!谢谢你的帮助,但是如果我能避免的话,正则表达式是一个很大的禁忌——只是在大字符串上太慢了。不过还是为建议干杯。
$wordCounts = array_count_values(str_word_count(strtolower($sentence), 1));
arsort($wordCounts);