2010-12-14 9 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で行うのではなく、データベースにロードする方がよいでしょう。ワンタイムローディングコストは、データマイニングがデータベースに格納されるとどれだけ容易になるかによって相殺されます。 –

+0

ありがとう、私はそのアプローチを試してみる – madkris24

答えて

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

別々の$要約配列を使用して、array_count_values($ words)を呼び出すのに違いはありますか? – madkris24

+0

あなたのメソッドは全体のcsv(1回の実行サイクルは多くのリソースを必要とします)の比較を行いますが、この1行ごとの比較は複数の実行サイクルに分割され、各サイクルで非常に小さなリソースが必要です – ajreal

+0

ああ、ありがとう! – madkris24

関連する問題