2010-12-14 69 views
0

我有一个来自csv文件的大数据,其格式如下所示。根据常见词的出现对csv数据进行排序

url1, comment1 
url2, comment2 

我需要找到注释之间的常用词,并根据每行上出现的常见词进行排序。

目前我能够获得常用词汇,但我失去了如何在不耗尽内存的情况下对每个常用词汇进行排序。

下面是我非常低效的代码。

$data = array(); 
while (($row = fgetcsv($fh, 1024, ',')) !== false) { 
    $data[] = $row[1]; 
} 

$str = preg_replace('/\s\s+/', ' ', trim(str_replace(array('!', '?', '.', ','), ' ', implode('', $data)))); 

$words = explode(" ", $str); 
var_dump(array_count_values($words)); 
+0

如果你要进行切片/切割的CSV数据反复,你最好把它加载到数据库中,而不是在PHP中进行。一次加载成本将被数据挖掘一旦进入数据库后容易多少所抵消。 – 2010-12-14 20:10:40

+0

谢谢,我会尝试这种方法 – madkris24 2010-12-15 09:49:25

回答

1

负载分解数据/字到数据库听起来是个好主意,

OR你可以试试这个:

$summary = array(); 
$data = array(); 
while (($row = fgetcsv($fh, 1024, ',')) !== false) 
{ 
    $data[] = $row[1]; 
    $str = preg_replace('/\s\s+/', ' ', trim(str_replace(array('!', '?', '.', ','), ' ', $row[1]))); 
    $words = explode(" ", $str); 
    foreach ($words as $word) 
    { 
    $word = strtolower($word); // lowercase to reduce variations 
    $summary[$word]++; 
    } 
} 
/* variable $summary will contains all your count */ 
/* take note on the size of $summary, could growth quite big */ 
+0

使用单独的$ summary数组和调用array_count_values($ words)是否有区别? – madkris24 2010-12-14 23:43:06

+0

你的方法是在整个csv上做一个比较(单个执行周期需要大量资源),而这个逐行比较是分解成多个执行周期的,每个周期都需要很小的资源 – ajreal 2010-12-15 12:16:16

+0

啊很酷谢谢! – madkris24 2010-12-15 13:24:03

相关问题