0
<?php



$filename = "largefile.txt";



/* get content of $filename in $content */

$content = strtolower(file_get_contents($filename));



/* split $content into array of substrings of $content i.e wordwise */

$wordArray = preg_split('/[^a-z]/', $content, -1, PREG_SPLIT_NO_EMPTY);



/* "stop words", filter them */

$filteredArray = array_filter($wordArray, function($x){

return !preg_match("/^(.|a|an|and|the|this|at|in|or|of|is|for|to)$/",$x);

});



/* get associative array of values from $filteredArray as keys and their frequency count as value */

$wordFrequencyArray = array_count_values($filteredArray);



/* Sort array from higher to lower, keeping keys */

arsort($wordFrequencyArray);

これは、ファイル内の個別の単語の頻度を調べるために実装した私のコードです。これは機能しています。

今私がやりたいのは、10個のテキストファイルがあるとしましょう。10個のファイルすべてで単語の単語の頻度を数えたい、つまり、10個のファイルすべてで単語「スタック」の頻度を見つけたい場合単語スタックがすべてのファイルに表示される回数。その後、すべての個別の単語に対してそれを実行します。

私は単一のファイルに対してそれを行いましたが、それを複数のファイルに拡張する方法を考えることができません。助けてくれてありがとう、私の悪い英語をお詫びします

4

1 に答える 1

2

取得したものを関数に入れて、foreachループを使用して配列内の各ファイル名に対して呼び出します。

<?php

$wordFrequencyArray = array();

function countWords($file) use($wordFrequencyArray) {
    /* get content of $filename in $content */
    $content = strtolower(file_get_contents($filename));

    /* split $content into array of substrings of $content i.e wordwise */
    $wordArray = preg_split('/[^a-z]/', $content, -1, PREG_SPLIT_NO_EMPTY);

    /* "stop words", filter them */
    $filteredArray = array_filter($wordArray, function($x){
        return !preg_match("/^(.|a|an|and|the|this|at|in|or|of|is|for|to)$/",$x);
    });

    /* get associative array of values from $filteredArray as keys and their frequency count as value */
    foreach (array_count_values($filteredArray) 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 $file) {
    countWords($file);
}

print_r($wordFrequencyArray);
于 2012-08-09T06:18:06.937 に答える