0
<?php

$wordFrequencyArray = array();

function countWordsfrequency($filename) {  
global $wordFrequencyArray;

$contentoffile = (file_get_contents($filename));

$wordArray = preg_split('/[^a-zA-Z0-9]/', $contentoffile, -1, NO_EMPTY);


foreach (array_count_values($wordArray) as $word => $count) {
      if (!isset($wordFrequencyArray[$word])) $wordFrequencyArray[$word] = 0;
        $wordFrequencyArray[$word] += $count;
    }
}


$filenames = array('file1.txt', 'file2.txt','file3.txt','file4.txt');
foreach ($filenames as $filename) {
    countWordsfrequency($filename);
}



print_r($wordFrequencyArray);

?>

これは、複数のファイル内の各単語の頻度を見つけてそれらを印刷するための私のコードです。今、私がやりたいことは、どの単語がどのファイルで発生するかという交点を見つけることです。たとえば、「スタック」という単語がある場合は、それが発生するファイルと、すでに計算したと思われるその頻度を印刷します。

最終的な結果は、頻度の後にその単語が出現するファイルのようになるはずです。

どのように進めればよいですか?countWords関数自体の for ループでチェックする必要があります。

4

1 に答える 1

0

もう少し情報を保存する必要があります。あまり堅牢なものは必要ないように思われるため、クラスの使用を避けます。

<?php
$wordFrequencies = array();

function countWordsFrequency($filename) {  
  global $wordFrequencies;
  $contentoffile = (file_get_contents($filename));
  $wordArray = preg_split('/[^a-zA-Z0-9]/', $contentoffile, -1, NO_EMPTY);

  foreach (array_count_values($wordArray) as $word => $count) {
    $wordFreqInfo = $wordFrequencies[$word];
    if (!isset($wordFreqInfo)) {
      $wordFreqInfo = array();
      $wordFreqInfo['total'] = 0;
      $wordFreqInfo['files'] = array();
      $wordFrequencies[$word] = $wordFreqInfo;
    }

    // If this is the first occurence of this word in the file, start a count.
    if (!isset($wordFreqInfo['files'][$filename]))
      $wordFreqInfo['files'][$filename] = 0;
    }

    // Increment counts for both the total and the file.
    $wordFreqInfo['total'] += $count;
    $wordFreqInfo['files'][$filename] += $count;
  }
}

$filenames = array('file1.txt', 'file2.txt','file3.txt','file4.txt');
foreach ($filenames as $filename) {
  countWordsFrequency($filename);
}

print_r($wordFrequencies);
?>
于 2012-08-16T07:22:50.377 に答える