2017-06-24 11 views
1

私はテキストファイルから単語のランク付けを実行するこのコードを持っています。ファイルを開き、ファイル内のすべての単語が何回表示されるかの配列を出力します。この部分はうまくいきますが、2番目の部分では、コードは指定されたフォルダ内の他のすべてのテキストファイルを調べ、すべてのファイルからすべての単語が合計として表示される回数を出力します。問題は、出力配列がマージされた合計ではないことです。繰り返しがあります。例えば、私が取得 -PHP配列がマージされていません

the -- 2 
quick -- 1 
brown -- 1 
fox -- 1 
jumped -- 1 
over -- 1 
lazy -- 1 
dog -- 1 
dog -- 2 
a -- 2 
lazy -- 1 
fox -- 1 
cannot -- 1 
catch -- 1 
fast -- 1 
the -- 1 
may -- 1 
be -- 1 

の代わりに -

the -- 3 
dog -- 3 
fox -- 2 
lazy -- 2 
a -- 2 
quick -- 1 
brown -- 1 
jumped -- 1 
over -- 1 
very -- 1 
cannot -- 1 
catch -- 1 
fast -- 1 
may -- 1 
be -- 1 

これは、全体のコード -

<?php 
echo "<h3>Word Rank From One File</h3>"; 
$counted = strtolower(file_get_contents("docs/one.txt")); 
$wordArray = preg_split('/[^a-z]/', $counted, -1, PREG_SPLIT_NO_EMPTY); 
$wordFrequencyArray = array_count_values($wordArray); 

/* Sort array from higher to lower, keeping keys */ 
arsort($wordFrequencyArray); 

/* grab Top 10, huh sorted? */ 
$top10words = array_slice($wordFrequencyArray,0,10); 

/* display them */ 
foreach ($top10words as $topWord => $frequency) 
    echo "$topWord -- $frequency<br/>"; 

echo "<h3>Total From All Files</h3>"; 
$path = realpath('docs'); 
foreach(glob($path.'/*.*') as $file) { 
    $counted = strtolower(file_get_contents($file)); 
    $wordArray = preg_split('/[^a-z]/', $counted, -1, PREG_SPLIT_NO_EMPTY); 
    $wordFrequencyArray = array_count_values($wordArray); 
    $combine = array_merge($wordFrequencyArray); 
    /* Sort array from higher to lower, keeping keys */ 
    arsort($wordFrequencyArray); 

    /* grab Top 10, huh sorted? */ 
    $top10words = array_slice($wordFrequencyArray,0,10); 

    /* display them */ 
    foreach ($top10words as $topWord => $frequency) 
     echo "$topWord -- $frequency<br/>"; 
    } 

?> 

である私が何を間違っているのか、やっていないのですか? 2つのサンプルテキストファイルには次のものがあります。

茶色のキツネが怠惰な犬の上を飛び出しました。キツネが跳んだ犬はその後急に走った。

怠惰なキツネが速い犬をキャッチすることはできません。犬は非常に速いかもしれません。 私はあまりにもいくつかの単語がスキップされていることに気づいた。

+0

array_mergeをマージするための1つ以上のアレイを受け入れ、あなたは$コンバイン= array_merge($ wordFrequencyArray)で何をしているの? –

+0

読み込まれたテキストファイルから出力配列をマージしようとしています。 one.txtとtwo.txtからの出力をマージするように。ですから、私は$ wordFrequencyArrayに2つの異なる出力が含まれていると仮定しています。 –

答えて

1

ファイルからすべての単語を集計し、その頻度を数えなければなりません。

$wordArrayTotal = []; 
foreach (glob($path.'/*.*') as $file) { 
    $counted = strtolower(file_get_contents($file)); 
    $wordArray = preg_split('/[^a-z]/', $counted, -1, PREG_SPLIT_NO_EMPTY); 
    $wordArrayTotal = array_merge($wordArrayTotal, $wordArray); 
} 

$wordFrequencyArray = array_count_values($wordArrayTotal); 

/* Sort array from higher to lower, keeping keys */ 
arsort($wordFrequencyArray); 

/* grab Top 10, huh sorted? */ 
$top10words = array_slice($wordFrequencyArray, 0, 10); 

/* display them */ 
foreach ($top10words as $topWord => $frequency) { 
    echo "$topWord -- $frequency<br/>"; 
} 
+0

ありがとう、それは今動作します。 –

関連する問題