我正在构建一个脚本,需要计算每个文件中每个单词的出现次数,大约2000个文件,每个大约500KB。
这是1GB的数据,但是MySQL的使用量超过30GB(然后就会用完和结束)。
我已经找到了我自由使用关联数组的原因,看起来像这样:
for($runc=0; $runc<$numwords; $runc++)
{
$word=trim($content[$runc]);
if ($words[$run][$word]==$wordacceptance && !$wordused[$word])
{
$wordlist[$onword]=$word;
$onword++;
$wordused[$word]=true;
}
$words[$run][$word]++; // +1 to number of occurances of this word in current category
$nwords[$run]++;
}
$ run是当前类别。
你可以看到计算单词的数量我只是将它们添加到关联数组$ words [$ run] [$ word]。随着每个文件类别中每个单词的出现而增加。
然后$ wordused [$ word]用于确保单词不会被添加到单词列表两次。
这会占用大量的内存。有更有效的方法吗?我正在考虑使用MySQL内存表,但我希望用PHP完成整个过程,因此它快速便携。
答案 0 :(得分:1)
您是否尝试过内置函数来计算单词?
http://hu2.php.net/manual/en/function.str-word-count.php
编辑:或者使用explode获取一系列单词,使用array_walk
修剪所有单词,然后sort
,然后使用for
进行修剪,并计算出现次数,如果一个新单词出现在列表中,你可以flush
出现次数,所以不需要先记录 这个单词。