2010-12-14 97 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

相關問題